void SIPBuilder::CameraInfoAck(osip_message_t* msg, char** rtmsg, size_t* rtlen) { string head_line("SIP/2.0 200 OK\r\n"); osip_via_t *via; char* via_c = NULL; if( !osip_list_eol (&msg->vias, 0)) { via = (osip_via_t *) osip_list_get (&msg->vias, 0); osip_via_to_str( via, &via_c); }else{ return; } string via_header(via_c); via_header = string("Via: ")+via_header+string("\r\n"); char* from_tag_c; osip_from_to_str( msg->from, &from_tag_c ); string from_header(from_tag_c); from_header = string("From: ")+from_header+string("\r\n"); char* to_tag_c; osip_to_to_str( msg->to, &to_tag_c ); string to_header(to_tag_c); string to_tag_num = _RandomNum(); to_header = to_header + ";tag="+to_tag_num; to_header = string("To: ")+to_header+string("\r\n"); string call_id_num = string(msg->call_id->number); string call_header = string("Call-ID: ")+call_id_num+("\r\n"); string cseq_num = string(msg->cseq->number); string cseq_header = string("Cseq: ")+cseq_num+string(" MESSAGE\r\n"); string content_type_header = "Content-Type: APPLICATION/SDP\r\n"; string forwords = string("Max-Forwards: 70\r\n"); string expires = string("Expires: 3000\r\n"); string contentlenth = string("Content-Length: 0")+string("\r\n"); string cflr = string("\r\n"); string sip_msg_str = head_line + via_header + to_header + from_header + call_header + cseq_header + content_type_header + forwords + expires + contentlenth + cflr; #ifdef DEBUG cout<<"check 200ok camerainfoack:"<<endl; cout<<sip_msg_str<<endl; #endif size_t sip_len = sip_msg_str.length(); char* sip_msg_c = (char*)malloc(sizeof(char)* sip_len); memcpy( sip_msg_c, sip_msg_str.c_str(), sip_len); *rtmsg = sip_msg_c; *rtlen = sip_len; /*send 200ok, wait ack*/ return; }
int main (int argc, char **argv) { FILE *tos_file; osip_to_t *to; char *a_to; char *dest; char *res; tos_file = fopen (argv[1], "r"); if (tos_file == NULL) { fprintf (stdout, "Failed to open %s file.\nUsage: tto tos.txt\n", argv[1]); exit (0); } a_to = (char *) osip_malloc (200); res = fgets (a_to, 200, tos_file); /* lines are under 200 */ while (res != NULL) { int errcode; /* remove the last '\n' before parsing */ strncpy (a_to + strlen (a_to) - 1, "\0", 1); if (0 != strncmp (a_to, "#", 1)) { /* allocate & init to */ osip_to_init (&to); printf ("=================================================\n"); printf ("TO TO PARSE: |%s|\n", a_to); errcode = osip_to_parse (to, a_to); if (errcode != -1) { if (osip_to_to_str (to, &dest) != -1) { printf ("result: |%s|\n", dest); osip_free (dest); } } else printf ("Bad to format: %s\n", a_to); osip_to_free (to); printf ("=================================================\n"); } res = fgets (a_to, 200, tos_file); /* lines are under 200 */ } osip_free (a_to); return 0; }
void SIPBuilder::BeenInvited( osip_message_t* msg, string port,char** rtmsg, size_t *rtlen, int*state, struct DialogInfo &dlg_info) { string uac_ip = _local_ip_str_; string uac_listen_port_str = _local_port_str_; string local_dev_name = _dev_name_; string head_line("SIP/2.0 200 OK\r\n"); osip_via_t *via; char* via_c = NULL; if( !osip_list_eol (&msg->vias, 0)) { via = (osip_via_t *) osip_list_get (&msg->vias, 0); osip_via_to_str( via, &via_c); }else{ *state = -1; return; } string via_header(via_c); via_header = string("Via: ")+via_header+string("\r\n"); char* from_tag_c; osip_from_to_str( msg->from, &from_tag_c ); string from_header(from_tag_c); from_header = string("From: ")+from_header+string("\r\n"); char* to_tag_c; osip_to_to_str( msg->to, &to_tag_c ); string to_header(to_tag_c); string to_tag_num = _RandomNum(); to_header = to_header + ";tag="+to_tag_num; to_header = string("To: ")+to_header+string("\r\n"); dlg_info.to_tag_num = to_tag_num; string contact_header; stringstream stream_contact_header; stream_contact_header<<"Contact: <sip:" << local_dev_name << "@" << uac_ip << ":"<< uac_listen_port_str<<">\r\n"; contact_header = stream_contact_header.str(); string call_id_num = string(msg->call_id->number); string call_header = string("Call-ID: ")+call_id_num+("\r\n"); string cseq_num = string(msg->cseq->number); string cseq_header = string("Cseq: ")+cseq_num+string(" INVITE\r\n"); string content_type_header = "Content-Type: APPLICATION/SDP\r\n"; string forwords = string("Max-Forwards: 70\r\n"); string expires = string("Expires: 3000\r\n"); string sdp_msg = _sdp_builder_.toString( string("##2015"), port); stringstream sdp_msg_length; sdp_msg_length<< sdp_msg.length(); string contentlenth = string("Content-Length: ")+sdp_msg_length.str()+string("\r\n"); string cflr = string("\r\n"); string sip_msg_str = head_line + via_header + to_header + from_header + call_header + cseq_header + contact_header + content_type_header + forwords + expires + contentlenth + cflr + sdp_msg; #ifdef DEBUG cout<<"check Been Invite:"<<endl; cout<<sip_msg_str<<endl; #endif size_t sip_len = sip_msg_str.length(); char* sip_msg_c = (char*)malloc(sizeof(char)* sip_len); memcpy( sip_msg_c, sip_msg_str.c_str(), sip_len); *rtmsg = sip_msg_c; *rtlen = sip_len; /*send 200ok, wait ack*/ *state = 0; return; }