| /* | 
 |  *  Copyright 2008 The WebRTC Project Authors. All rights reserved. | 
 |  * | 
 |  *  Use of this source code is governed by a BSD-style license | 
 |  *  that can be found in the LICENSE file in the root of the source | 
 |  *  tree. An additional intellectual property rights grant can be found | 
 |  *  in the file PATENTS.  All contributing project authors may | 
 |  *  be found in the AUTHORS file in the root of the source tree. | 
 |  */ | 
 |  | 
 | #ifndef WEBRTC_P2P_BASE_TESTSTUNSERVER_H_ | 
 | #define WEBRTC_P2P_BASE_TESTSTUNSERVER_H_ | 
 |  | 
 | #include "webrtc/p2p/base/stunserver.h" | 
 | #include "webrtc/rtc_base/socketaddress.h" | 
 | #include "webrtc/rtc_base/thread.h" | 
 |  | 
 | namespace cricket { | 
 |  | 
 | // A test STUN server. Useful for unit tests. | 
 | class TestStunServer : StunServer { | 
 |  public: | 
 |   static TestStunServer* Create(rtc::Thread* thread, | 
 |                                 const rtc::SocketAddress& addr) { | 
 |     rtc::AsyncSocket* socket = | 
 |         thread->socketserver()->CreateAsyncSocket(addr.family(), SOCK_DGRAM); | 
 |     rtc::AsyncUDPSocket* udp_socket = | 
 |         rtc::AsyncUDPSocket::Create(socket, addr); | 
 |  | 
 |     return new TestStunServer(udp_socket); | 
 |   } | 
 |  | 
 |   // Set a fake STUN address to return to the client. | 
 |   void set_fake_stun_addr(const rtc::SocketAddress& addr) { | 
 |     fake_stun_addr_ = addr; | 
 |   } | 
 |  | 
 |  private: | 
 |   explicit TestStunServer(rtc::AsyncUDPSocket* socket) : StunServer(socket) {} | 
 |  | 
 |   void OnBindingRequest(StunMessage* msg, | 
 |                         const rtc::SocketAddress& remote_addr) override { | 
 |     if (fake_stun_addr_.IsNil()) { | 
 |       StunServer::OnBindingRequest(msg, remote_addr); | 
 |     } else { | 
 |       StunMessage response; | 
 |       GetStunBindReqponse(msg, fake_stun_addr_, &response); | 
 |       SendResponse(response, remote_addr); | 
 |     } | 
 |   } | 
 |  | 
 |  private: | 
 |   rtc::SocketAddress fake_stun_addr_; | 
 | }; | 
 |  | 
 | }  // namespace cricket | 
 |  | 
 | #endif  // WEBRTC_P2P_BASE_TESTSTUNSERVER_H_ |