NS-3 based Named Data Networking (NDN) simulator
ndnSIM 2.3: NDN, CCN, CCNx, content centric networks
API Documentation
sip_client.cpp
Go to the documentation of this file.
1 #include <condition_variable>
2 
4 
5 #include <websocketpp/client.hpp>
6 
7 #include <iostream>
8 
9 #include <boost/thread/thread.hpp>
10 
12 
13 using websocketpp::lib::placeholders::_1;
14 using websocketpp::lib::placeholders::_2;
15 using websocketpp::lib::bind;
16 
17 // pull out the type of messages sent by our config
19 
20 // Create a server endpoint
22 
23 
24 bool received;
25 
27  // now it is safe to use the connection
28  std::cout << "connection ready" << std::endl;
29 
30  received=false;
31  // Send a SIP OPTIONS message to the server:
32  std::string SIP_msg="OPTIONS sip:carol@chicago.com SIP/2.0\r\nVia: SIP/2.0/WS df7jal23ls0d.invalid;rport;branch=z9hG4bKhjhs8ass877\r\nMax-Forwards: 70\r\nTo: <sip:carol@chicago.com>\r\nFrom: Alice <sip:alice@atlanta.com>;tag=1928301774\r\nCall-ID: a84b4c76e66710\r\nCSeq: 63104 OPTIONS\r\nContact: <sip:alice@pc33.atlanta.com>\r\nAccept: application/sdp\r\nContent-Length: 0\r\n\r\n";
33  sip_client.send(hdl, SIP_msg.c_str(), websocketpp::frame::opcode::text);
34 }
35 
37  client::connection_ptr con = sip_client.get_con_from_hdl(hdl);
38 
39  std::cout << "Received a reply:" << std::endl;
40  fwrite(msg->get_payload().c_str(), msg->get_payload().size(), 1, stdout);
41  received=true;
42 }
43 
44 int main(int argc, char* argv[]) {
45 
46  std::string uri = "ws://localhost:9001";
47 
48  if (argc == 2) {
49  uri = argv[1];
50  }
51 
52  try {
53  // We expect there to be a lot of errors, so suppress them
56 
57  // Initialize ASIO
58  sip_client.init_asio();
59 
60  // Register our handlers
61  sip_client.set_open_handler(bind(&on_open,&sip_client,::_1));
62  sip_client.set_message_handler(bind(&on_message,&sip_client,::_1,::_2));
63 
64  websocketpp::lib::error_code ec;
65  client::connection_ptr con = sip_client.get_connection(uri, ec);
66 
67  // Specify the SIP subprotocol:
68  con->add_subprotocol("sip");
69 
70  sip_client.connect(con);
71 
72  // Start the ASIO io_service run loop
73  sip_client.run();
74 
75  while(!received) {
76  boost::this_thread::sleep(boost::posix_time::milliseconds(100));
77  }
78 
79  std::cout << "done" << std::endl;
80 
81  } catch (websocketpp::exception const & e) {
82  std::cout << e.what() << std::endl;
83  }
84 }
static level const all
Special aggregate value representing "all levels".
Definition: levels.hpp:152
connection_type::ptr connection_ptr
Type of a shared pointer to the connections this server will create.
websocketpp::config::asio_tls_client::message_type::ptr message_ptr
websocketpp::client< websocketpp::config::asio_client > client
Definition: sip_client.cpp:11
void set_open_handler(open_handler h)
Definition: endpoint.hpp:277
websocketpp::config::asio_client::message_type::ptr message_ptr
Definition: sip_client.cpp:18
boost::posix_time::time_duration milliseconds(long duration)
Definition: asio.hpp:117
lib::weak_ptr< void > connection_hdl
A handle to uniquely identify a connection.
connection_ptr get_con_from_hdl(connection_hdl hdl, lib::error_code &ec)
Retrieves a connection_ptr from a connection_hdl (exception free)
Definition: endpoint.hpp:643
connection_ptr connect(connection_ptr con)
Begin the connection process for the given connection.
void on_open(client *c, websocketpp::connection_hdl hdl)
Definition: sip_client.cpp:26
void init_asio(io_service_ptr ptr, lib::error_code &ec)
initialize asio transport with external io_service (exception free)
Definition: endpoint.hpp:181
virtual char const * what() const
Definition: error.hpp:263
lib::shared_ptr< message > ptr
Definition: message.hpp:86
bool received
Definition: sip_client.cpp:24
void clear_error_channels(log::level channels)
Clear Error logging channels.
Definition: endpoint.hpp:253
int main(int argc, char *argv[])
Definition: sip_client.cpp:44
void clear_access_channels(log::level channels)
Clear Access logging channels.
Definition: endpoint.hpp:231
void on_message(client *c, websocketpp::connection_hdl hdl, message_ptr msg)
Definition: sip_client.cpp:36
std::size_t run()
wraps the run method of the internal io_service object
Definition: endpoint.hpp:613
client sip_client
Definition: sip_client.cpp:21
void set_message_handler(message_handler h)
Definition: endpoint.hpp:322
static level const all
Special aggregate value representing "all levels".
Definition: levels.hpp:80
void send(connection_hdl hdl, std::string const &payload, frame::opcode::value op, lib::error_code &ec)
Create a message and add it to the outgoing send queue (exception free)
connection_ptr get_connection(uri_ptr location, lib::error_code &ec)
Get a new connection.