Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / third_party / libjingle / source / talk / p2p / base / teststunserver.h
index 6f85009..eef15d7 100644 (file)
  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#ifndef TALK_P2P_BASE_TESTSTUNSERVER_H_
-#define TALK_P2P_BASE_TESTSTUNSERVER_H_
+#ifndef WEBRTC_P2P_BASE_TESTSTUNSERVER_H_
+#define WEBRTC_P2P_BASE_TESTSTUNSERVER_H_
 
-#include "talk/p2p/base/stunserver.h"
+#include "webrtc/p2p/base/stunserver.h"
 #include "webrtc/base/socketaddress.h"
 #include "webrtc/base/thread.h"
 
 namespace cricket {
 
 // A test STUN server. Useful for unit tests.
-class TestStunServer {
+class TestStunServer : StunServer {
  public:
-  TestStunServer(rtc::Thread* thread,
-                 const rtc::SocketAddress& addr)
-      : socket_(thread->socketserver()->CreateAsyncSocket(addr.family(),
-                                                          SOCK_DGRAM)),
-        udp_socket_(rtc::AsyncUDPSocket::Create(socket_, addr)),
-        server_(udp_socket_) {
+  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::AsyncSocket* socket_;
-  rtc::AsyncUDPSocket* udp_socket_;
-  cricket::StunServer server_;
+  rtc::SocketAddress fake_stun_addr_;
 };
 
 }  // namespace cricket
 
-#endif  // TALK_P2P_BASE_TESTSTUNSERVER_H_
+#endif  // WEBRTC_P2P_BASE_TESTSTUNSERVER_H_