int __amplesky28181_close(pvp_uthttp put, int sockfd) { gldata *gd = NULL; char src_flag[32] = {0}; //struct _sessions session; set_idle_bind_port( getsockport(sockfd) ); sprintf(src_flag, "%d:%d", put->src_ip, put->src_port); if ((gd = gl_get_data(src_flag)) != NULL) gl_rm_data(src_flag); return 1; }
int __amplesky28181_request(pvp_uthttp put, char **ut_buf, u32 *pack_len) { int res = 1; char lip[16] = {0}; char dip[16] = {0}; //printf("dport:%d\n", put->dport); //printf("sport:%d\n", put->src_port); //char cmd[16] = {0}; //memcpy(cmd, *ut_buf, sizeof(cmd)-1); //puts(cmd); puts("---------- REQUEST ----------"); if (sip_is(*ut_buf, SIP_FLAG_REGISTER)) { puts("---------- REQUEST 1 --------"); do_ferry_sip_request_register(put, ut_buf, pack_len); } else if (sip_is(*ut_buf, SIP_FLAG_MESSAGE)) { puts("---------- REQUEST 2 --------"); inet_ultoa(__gg.outer_addr, lip); inet_ultoa(put->dip, dip); do_ferry_sip_request_message(put, ut_buf, pack_len); do_sip_reply_replace_to_by_key(put, SIP_FLAG_CONTACT, lip, getsockport(put->svr_sock), ut_buf, pack_len); do_sip_reply_replace_to_by_key(put, "To: <sip:", dip, put->dport, ut_buf, pack_len); } else if (sip_is(*ut_buf, SIP_FLAG_OK)) { puts("---------- REQUEST 3 --------"); do_ferry_sip_request_200ok(put, ut_buf, pack_len); } puts("---------- REQUEST 4 --------"); do_sip_reply_invite(put, ut_buf, pack_len); ////////////////// /* else if (sip_is(*ut_buf, SIP_FLAG_INVITE)) { do_sip_reply_invite(put, ut_buf, pack_len); do_sip_reply_replace_via(put, ut_buf, pack_len); } else if (sip_is(*ut_buf, SIP_FLAG_BYE)) { do_sip_reply_bye(put, ut_buf, pack_len); do_sip_reply_replace_via(put, ut_buf, pack_len); } else if (sip_is(*ut_buf, SIP_FLAG_ACK)) { do_sip_reply_ack(put, ut_buf, pack_len); do_sip_reply_replace_via(put, ut_buf, pack_len); } else if (sip_is(*ut_buf, SIP_FLAG_INFO)) { do_sip_reply_info(put, ut_buf, pack_len); do_sip_reply_replace_via(put, ut_buf, pack_len); } do_sip_reply_replace_by_key(put, SIP_FLAG_CONTACT, ut_buf, pack_len); do_sip_reply_replace_by_key(put, "From: <sip:", ut_buf, pack_len); */ ///////////////////// puts("---------- REQUEST 5 --------"); update_content_len(ut_buf, pack_len); puts("---------- REQUEST 6 --------"); return res; }
/* * main: Sets up the socket and handles client requests with a child * process per socket. */ void dmac_listener(void *v_void) { verinet_t *v = (verinet_t *)v_void; int sockfd, newsockfd, one = 1; socklen_t clilen; struct sockaddr_in cli_addr, serv_addr; /* Initialize socket ... */ if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { perror("server: can't open stream socket"); exit(1); } if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (char *) &one, sizeof (one)) < 0) { perror("setsockopt"); } /* * Setup server address... */ memset((void *) &serv_addr,0x0, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = htonl(INADDR_ANY); serv_addr.sin_port = htons(0); /* Pick any port */ /* * Bind our local address */ if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) { perror("dmac: unable to bind address"); sal_thread_exit(0); } v->dmaPort = getsockport(sockfd); /* Get port that was picked */ /* listen for inbound connections ... */ listen(sockfd, 5); /* Notify dmac_init that socket is listening */ sal_sem_give(v->dmacListening); printk("DMA Controller listening on port[%d]\n", v->dmaPort); while (!v->dmacWorkerExit) { clilen = sizeof(cli_addr); newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen); if (newsockfd < 0 && errno == EINTR) { continue; } if (newsockfd < 0) { perror("server: accept error"); } else { v->dmacFd = newsockfd; v->dmacHandler = sal_thread_create("DMA-controller", SAL_THREAD_STKSZ, 100, dmac_handler, v); if (SAL_THREAD_ERROR == v->dmacHandler) { printk("Thread creation error!\n"); } else { debugk(DK_VERINET, "DMAC request thread dispatched.\n"); } } } debugk(DK_VERINET, "DMA listener shutdown.\n"); sal_thread_exit(0); }