123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- #ifndef P2P_BASE_STUN_REQUEST_H_
- #define P2P_BASE_STUN_REQUEST_H_
- #include <stddef.h>
- #include <stdint.h>
- #include <map>
- #include <string>
- #include "api/transport/stun.h"
- #include "rtc_base/message_handler.h"
- #include "rtc_base/third_party/sigslot/sigslot.h"
- #include "rtc_base/thread.h"
- namespace cricket {
- class StunRequest;
- const int kAllRequests = 0;
- const int STUN_TOTAL_TIMEOUT = 39750;
- class StunRequestManager {
- public:
- explicit StunRequestManager(rtc::Thread* thread);
- ~StunRequestManager();
-
- void Send(StunRequest* request);
- void SendDelayed(StunRequest* request, int delay);
-
-
-
- void Flush(int msg_type);
-
-
- bool HasRequest(int msg_type);
-
-
- void Remove(StunRequest* request);
-
- void Clear();
-
-
- bool CheckResponse(StunMessage* msg);
- bool CheckResponse(const char* data, size_t size);
- bool empty() { return requests_.empty(); }
-
- void set_origin(const std::string& origin) { origin_ = origin; }
-
- sigslot::signal3<const void*, size_t, StunRequest*> SignalSendPacket;
- private:
- typedef std::map<std::string, StunRequest*> RequestMap;
- rtc::Thread* thread_;
- RequestMap requests_;
- std::string origin_;
- friend class StunRequest;
- };
- class StunRequest : public rtc::MessageHandler {
- public:
- StunRequest();
- explicit StunRequest(StunMessage* request);
- ~StunRequest() override;
-
- void Construct();
-
- StunRequestManager* manager() { return manager_; }
-
- const std::string& id() { return msg_->transaction_id(); }
-
- uint32_t reduced_transaction_id() const {
- return msg_->reduced_transaction_id();
- }
-
- const std::string& origin() const { return origin_; }
- void set_origin(const std::string& origin) { origin_ = origin; }
-
- int type();
-
- const StunMessage* msg() const;
-
- StunMessage* mutable_msg();
-
- int Elapsed() const;
- protected:
- int count_;
- bool timeout_;
- std::string origin_;
-
-
- virtual void Prepare(StunMessage* request) {}
-
- virtual void OnResponse(StunMessage* response) {}
- virtual void OnErrorResponse(StunMessage* response) {}
- virtual void OnTimeout() {}
-
- virtual void OnSent();
-
- virtual int resend_delay();
- private:
- void set_manager(StunRequestManager* manager);
-
- void OnMessage(rtc::Message* pmsg) override;
- StunRequestManager* manager_;
- StunMessage* msg_;
- int64_t tstamp_;
- friend class StunRequestManager;
- };
- }
- #endif
|