1269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org/* 2269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org * Copyright 2008 The WebRTC Project Authors. All rights reserved. 3269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org * 4269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org * Use of this source code is governed by a BSD-style license 5269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org * that can be found in the LICENSE file in the root of the source 6269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org * tree. An additional intellectual property rights grant can be found 7269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org * in the file PATENTS. All contributing project authors may 8269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org * be found in the AUTHORS file in the root of the source tree. 9269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org */ 10269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 11269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org#ifndef WEBRTC_P2P_BASE_TESTSTUNSERVER_H_ 12269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org#define WEBRTC_P2P_BASE_TESTSTUNSERVER_H_ 13269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 14269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org#include "webrtc/p2p/base/stunserver.h" 15269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org#include "webrtc/base/socketaddress.h" 16269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org#include "webrtc/base/thread.h" 17269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 18269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.orgnamespace cricket { 19269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 20269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org// A test STUN server. Useful for unit tests. 21269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.orgclass TestStunServer : StunServer { 22269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org public: 23269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org static TestStunServer* Create(rtc::Thread* thread, 24269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org const rtc::SocketAddress& addr) { 25269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org rtc::AsyncSocket* socket = 26269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org thread->socketserver()->CreateAsyncSocket(addr.family(), SOCK_DGRAM); 27269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org rtc::AsyncUDPSocket* udp_socket = 28269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org rtc::AsyncUDPSocket::Create(socket, addr); 29269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 30269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org return new TestStunServer(udp_socket); 31269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org } 32269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 33269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org // Set a fake STUN address to return to the client. 34269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org void set_fake_stun_addr(const rtc::SocketAddress& addr) { 35269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org fake_stun_addr_ = addr; 36269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org } 37269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 38269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org private: 39269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org explicit TestStunServer(rtc::AsyncUDPSocket* socket) : StunServer(socket) {} 40269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 41269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org void OnBindingRequest(StunMessage* msg, 4214665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org const rtc::SocketAddress& remote_addr) override { 43269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org if (fake_stun_addr_.IsNil()) { 44269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org StunServer::OnBindingRequest(msg, remote_addr); 45269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org } else { 46269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org StunMessage response; 47269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org GetStunBindReqponse(msg, fake_stun_addr_, &response); 48269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org SendResponse(response, remote_addr); 49269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org } 50269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org } 51269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 52269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org private: 53269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org rtc::SocketAddress fake_stun_addr_; 54269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org}; 55269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 56269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org} // namespace cricket 57269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 58269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org#endif // WEBRTC_P2P_BASE_TESTSTUNSERVER_H_ 59