| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. | 2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 64 return kNATEncodedIPv6AddressSize; | 64 return kNATEncodedIPv6AddressSize; |
| 65 } | 65 } |
| 66 return 0U; | 66 return 0U; |
| 67 } | 67 } |
| 68 | 68 |
| 69 | 69 |
| 70 // NATSocket | 70 // NATSocket |
| 71 class NATSocket : public AsyncSocket, public sigslot::has_slots<> { | 71 class NATSocket : public AsyncSocket, public sigslot::has_slots<> { |
| 72 public: | 72 public: |
| 73 explicit NATSocket(NATInternalSocketFactory* sf, int family, int type) | 73 explicit NATSocket(NATInternalSocketFactory* sf, int family, int type) |
| 74 : sf_(sf), family_(family), type_(type), connected_(false), | 74 : sf_(sf), |
| 75 socket_(NULL), buf_(NULL), size_(0) { | 75 family_(family), |
| 76 } | 76 type_(type), |
| 77 connected_(false), |
| 78 socket_(nullptr), |
| 79 buf_(nullptr), |
| 80 size_(0) {} |
| 77 | 81 |
| 78 ~NATSocket() override { | 82 ~NATSocket() override { |
| 79 delete socket_; | 83 delete socket_; |
| 80 delete[] buf_; | 84 delete[] buf_; |
| 81 } | 85 } |
| 82 | 86 |
| 83 SocketAddress GetLocalAddress() const override { | 87 SocketAddress GetLocalAddress() const override { |
| 84 return (socket_) ? socket_->GetLocalAddress() : SocketAddress(); | 88 return (socket_) ? socket_->GetLocalAddress() : SocketAddress(); |
| 85 } | 89 } |
| 86 | 90 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 97 socket_ = sf_->CreateInternalSocket(family_, type_, addr, &server_addr_); | 101 socket_ = sf_->CreateInternalSocket(family_, type_, addr, &server_addr_); |
| 98 result = (socket_) ? socket_->Bind(addr) : -1; | 102 result = (socket_) ? socket_->Bind(addr) : -1; |
| 99 if (result >= 0) { | 103 if (result >= 0) { |
| 100 socket_->SignalConnectEvent.connect(this, &NATSocket::OnConnectEvent); | 104 socket_->SignalConnectEvent.connect(this, &NATSocket::OnConnectEvent); |
| 101 socket_->SignalReadEvent.connect(this, &NATSocket::OnReadEvent); | 105 socket_->SignalReadEvent.connect(this, &NATSocket::OnReadEvent); |
| 102 socket_->SignalWriteEvent.connect(this, &NATSocket::OnWriteEvent); | 106 socket_->SignalWriteEvent.connect(this, &NATSocket::OnWriteEvent); |
| 103 socket_->SignalCloseEvent.connect(this, &NATSocket::OnCloseEvent); | 107 socket_->SignalCloseEvent.connect(this, &NATSocket::OnCloseEvent); |
| 104 } else { | 108 } else { |
| 105 server_addr_.Clear(); | 109 server_addr_.Clear(); |
| 106 delete socket_; | 110 delete socket_; |
| 107 socket_ = NULL; | 111 socket_ = nullptr; |
| 108 } | 112 } |
| 109 | 113 |
| 110 return result; | 114 return result; |
| 111 } | 115 } |
| 112 | 116 |
| 113 int Connect(const SocketAddress& addr) override { | 117 int Connect(const SocketAddress& addr) override { |
| 114 if (!socket_) { // socket must be bound, for now | 118 if (!socket_) { // socket must be bound, for now |
| 115 return -1; | 119 return -1; |
| 116 } | 120 } |
| 117 | 121 |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 204 } | 208 } |
| 205 | 209 |
| 206 int Close() override { | 210 int Close() override { |
| 207 int result = 0; | 211 int result = 0; |
| 208 if (socket_) { | 212 if (socket_) { |
| 209 result = socket_->Close(); | 213 result = socket_->Close(); |
| 210 if (result >= 0) { | 214 if (result >= 0) { |
| 211 connected_ = false; | 215 connected_ = false; |
| 212 remote_addr_ = SocketAddress(); | 216 remote_addr_ = SocketAddress(); |
| 213 delete socket_; | 217 delete socket_; |
| 214 socket_ = NULL; | 218 socket_ = nullptr; |
| 215 } | 219 } |
| 216 } | 220 } |
| 217 return result; | 221 return result; |
| 218 } | 222 } |
| 219 | 223 |
| 220 int Listen(int backlog) override { return socket_->Listen(backlog); } | 224 int Listen(int backlog) override { return socket_->Listen(backlog); } |
| 221 AsyncSocket* Accept(SocketAddress* paddr) override { | 225 AsyncSocket* Accept(SocketAddress* paddr) override { |
| 222 return socket_->Accept(paddr); | 226 return socket_->Accept(paddr); |
| 223 } | 227 } |
| 224 int GetError() const override { return socket_->GetError(); } | 228 int GetError() const override { return socket_->GetError(); } |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 332 if (type == SOCK_STREAM) { | 336 if (type == SOCK_STREAM) { |
| 333 *nat_addr = nat_tcp_addr_; | 337 *nat_addr = nat_tcp_addr_; |
| 334 } else { | 338 } else { |
| 335 *nat_addr = nat_udp_addr_; | 339 *nat_addr = nat_udp_addr_; |
| 336 } | 340 } |
| 337 return factory_->CreateAsyncSocket(family, type); | 341 return factory_->CreateAsyncSocket(family, type); |
| 338 } | 342 } |
| 339 | 343 |
| 340 // NATSocketServer | 344 // NATSocketServer |
| 341 NATSocketServer::NATSocketServer(SocketServer* server) | 345 NATSocketServer::NATSocketServer(SocketServer* server) |
| 342 : server_(server), msg_queue_(NULL) { | 346 : server_(server), msg_queue_(nullptr) {} |
| 343 } | |
| 344 | 347 |
| 345 NATSocketServer::Translator* NATSocketServer::GetTranslator( | 348 NATSocketServer::Translator* NATSocketServer::GetTranslator( |
| 346 const SocketAddress& ext_ip) { | 349 const SocketAddress& ext_ip) { |
| 347 return nats_.Get(ext_ip); | 350 return nats_.Get(ext_ip); |
| 348 } | 351 } |
| 349 | 352 |
| 350 NATSocketServer::Translator* NATSocketServer::AddTranslator( | 353 NATSocketServer::Translator* NATSocketServer::AddTranslator( |
| 351 const SocketAddress& ext_ip, const SocketAddress& int_ip, NATType type) { | 354 const SocketAddress& ext_ip, const SocketAddress& int_ip, NATType type) { |
| 352 // Fail if a translator already exists with this extternal address. | 355 // Fail if a translator already exists with this extternal address. |
| 353 if (nats_.Get(ext_ip)) | 356 if (nats_.Get(ext_ip)) |
| 354 return NULL; | 357 return nullptr; |
| 355 | 358 |
| 356 return nats_.Add(ext_ip, new Translator(this, type, int_ip, server_, ext_ip)); | 359 return nats_.Add(ext_ip, new Translator(this, type, int_ip, server_, ext_ip)); |
| 357 } | 360 } |
| 358 | 361 |
| 359 void NATSocketServer::RemoveTranslator( | 362 void NATSocketServer::RemoveTranslator( |
| 360 const SocketAddress& ext_ip) { | 363 const SocketAddress& ext_ip) { |
| 361 nats_.Remove(ext_ip); | 364 nats_.Remove(ext_ip); |
| 362 } | 365 } |
| 363 | 366 |
| 364 Socket* NATSocketServer::CreateSocket(int type) { | 367 Socket* NATSocketServer::CreateSocket(int type) { |
| (...skipping 20 matching lines...) Expand all Loading... |
| 385 bool NATSocketServer::Wait(int cms, bool process_io) { | 388 bool NATSocketServer::Wait(int cms, bool process_io) { |
| 386 return server_->Wait(cms, process_io); | 389 return server_->Wait(cms, process_io); |
| 387 } | 390 } |
| 388 | 391 |
| 389 void NATSocketServer::WakeUp() { | 392 void NATSocketServer::WakeUp() { |
| 390 server_->WakeUp(); | 393 server_->WakeUp(); |
| 391 } | 394 } |
| 392 | 395 |
| 393 AsyncSocket* NATSocketServer::CreateInternalSocket(int family, int type, | 396 AsyncSocket* NATSocketServer::CreateInternalSocket(int family, int type, |
| 394 const SocketAddress& local_addr, SocketAddress* nat_addr) { | 397 const SocketAddress& local_addr, SocketAddress* nat_addr) { |
| 395 AsyncSocket* socket = NULL; | 398 AsyncSocket* socket = nullptr; |
| 396 Translator* nat = nats_.FindClient(local_addr); | 399 Translator* nat = nats_.FindClient(local_addr); |
| 397 if (nat) { | 400 if (nat) { |
| 398 socket = nat->internal_factory()->CreateAsyncSocket(family, type); | 401 socket = nat->internal_factory()->CreateAsyncSocket(family, type); |
| 399 *nat_addr = (type == SOCK_STREAM) ? | 402 *nat_addr = (type == SOCK_STREAM) ? |
| 400 nat->internal_tcp_address() : nat->internal_udp_address(); | 403 nat->internal_tcp_address() : nat->internal_udp_address(); |
| 401 } else { | 404 } else { |
| 402 socket = server_->CreateAsyncSocket(family, type); | 405 socket = server_->CreateAsyncSocket(family, type); |
| 403 } | 406 } |
| 404 return socket; | 407 return socket; |
| 405 } | 408 } |
| (...skipping 17 matching lines...) Expand all Loading... |
| 423 | 426 |
| 424 NATSocketServer::Translator* NATSocketServer::Translator::GetTranslator( | 427 NATSocketServer::Translator* NATSocketServer::Translator::GetTranslator( |
| 425 const SocketAddress& ext_ip) { | 428 const SocketAddress& ext_ip) { |
| 426 return nats_.Get(ext_ip); | 429 return nats_.Get(ext_ip); |
| 427 } | 430 } |
| 428 | 431 |
| 429 NATSocketServer::Translator* NATSocketServer::Translator::AddTranslator( | 432 NATSocketServer::Translator* NATSocketServer::Translator::AddTranslator( |
| 430 const SocketAddress& ext_ip, const SocketAddress& int_ip, NATType type) { | 433 const SocketAddress& ext_ip, const SocketAddress& int_ip, NATType type) { |
| 431 // Fail if a translator already exists with this extternal address. | 434 // Fail if a translator already exists with this extternal address. |
| 432 if (nats_.Get(ext_ip)) | 435 if (nats_.Get(ext_ip)) |
| 433 return NULL; | 436 return nullptr; |
| 434 | 437 |
| 435 AddClient(ext_ip); | 438 AddClient(ext_ip); |
| 436 return nats_.Add(ext_ip, | 439 return nats_.Add(ext_ip, |
| 437 new Translator(server_, type, int_ip, server_, ext_ip)); | 440 new Translator(server_, type, int_ip, server_, ext_ip)); |
| 438 } | 441 } |
| 439 void NATSocketServer::Translator::RemoveTranslator( | 442 void NATSocketServer::Translator::RemoveTranslator( |
| 440 const SocketAddress& ext_ip) { | 443 const SocketAddress& ext_ip) { |
| 441 nats_.Remove(ext_ip); | 444 nats_.Remove(ext_ip); |
| 442 RemoveClient(ext_ip); | 445 RemoveClient(ext_ip); |
| 443 } | 446 } |
| (...skipping 26 matching lines...) Expand all Loading... |
| 470 // NATSocketServer::TranslatorMap | 473 // NATSocketServer::TranslatorMap |
| 471 NATSocketServer::TranslatorMap::~TranslatorMap() { | 474 NATSocketServer::TranslatorMap::~TranslatorMap() { |
| 472 for (TranslatorMap::iterator it = begin(); it != end(); ++it) { | 475 for (TranslatorMap::iterator it = begin(); it != end(); ++it) { |
| 473 delete it->second; | 476 delete it->second; |
| 474 } | 477 } |
| 475 } | 478 } |
| 476 | 479 |
| 477 NATSocketServer::Translator* NATSocketServer::TranslatorMap::Get( | 480 NATSocketServer::Translator* NATSocketServer::TranslatorMap::Get( |
| 478 const SocketAddress& ext_ip) { | 481 const SocketAddress& ext_ip) { |
| 479 TranslatorMap::iterator it = find(ext_ip); | 482 TranslatorMap::iterator it = find(ext_ip); |
| 480 return (it != end()) ? it->second : NULL; | 483 return (it != end()) ? it->second : nullptr; |
| 481 } | 484 } |
| 482 | 485 |
| 483 NATSocketServer::Translator* NATSocketServer::TranslatorMap::Add( | 486 NATSocketServer::Translator* NATSocketServer::TranslatorMap::Add( |
| 484 const SocketAddress& ext_ip, Translator* nat) { | 487 const SocketAddress& ext_ip, Translator* nat) { |
| 485 (*this)[ext_ip] = nat; | 488 (*this)[ext_ip] = nat; |
| 486 return nat; | 489 return nat; |
| 487 } | 490 } |
| 488 | 491 |
| 489 void NATSocketServer::TranslatorMap::Remove( | 492 void NATSocketServer::TranslatorMap::Remove( |
| 490 const SocketAddress& ext_ip) { | 493 const SocketAddress& ext_ip) { |
| 491 TranslatorMap::iterator it = find(ext_ip); | 494 TranslatorMap::iterator it = find(ext_ip); |
| 492 if (it != end()) { | 495 if (it != end()) { |
| 493 delete it->second; | 496 delete it->second; |
| 494 erase(it); | 497 erase(it); |
| 495 } | 498 } |
| 496 } | 499 } |
| 497 | 500 |
| 498 NATSocketServer::Translator* NATSocketServer::TranslatorMap::FindClient( | 501 NATSocketServer::Translator* NATSocketServer::TranslatorMap::FindClient( |
| 499 const SocketAddress& int_ip) { | 502 const SocketAddress& int_ip) { |
| 500 Translator* nat = NULL; | 503 Translator* nat = nullptr; |
| 501 for (TranslatorMap::iterator it = begin(); it != end() && !nat; ++it) { | 504 for (TranslatorMap::iterator it = begin(); it != end() && !nat; ++it) { |
| 502 nat = it->second->FindClient(int_ip); | 505 nat = it->second->FindClient(int_ip); |
| 503 } | 506 } |
| 504 return nat; | 507 return nat; |
| 505 } | 508 } |
| 506 | 509 |
| 507 } // namespace rtc | 510 } // namespace rtc |
| OLD | NEW |