void init_topic(topic_para **topic, char *name, int name_len) { *topic = (topic_para *)hfmem_malloc(sizeof(topic_para) + name_len*sizeof(char)); if(*topic == NULL) { printf("NO memory!\n"); return ; } memset(*topic, 0, sizeof(topic_para) + name_len*sizeof(char)); (*topic)->msg_id = 0; memcpy((*topic)->name, name, name_len); }
static int USER_FUNC download_audio_file(char *purl) { httpc_req_t http_req; char *content_data=NULL; char *temp_buf=NULL; parsed_url_t url={0}; http_session_t hhttp=0; int total_size,read_size=0; int rv=0; tls_init_config_t *tls_cfg=NULL; char *test_url=purl; bzero(&http_req,sizeof(http_req)); http_req.type = HTTP_GET; http_req.version=HTTP_VER_1_1; if((temp_buf = (char*)hfmem_malloc(256))==NULL) { u_printf("no memory\n"); rv= -HF_E_NOMEM; goto exit; } bzero(temp_buf,sizeof(temp_buf)); if((rv=hfhttp_parse_URL(test_url,temp_buf , 256, &url))!=HF_SUCCESS) { goto exit; } if((rv=hfhttp_open_session(&hhttp,test_url,0,tls_cfg,3))!=HF_SUCCESS) { u_printf("http open fail\n"); goto exit; } hfsys_disable_all_soft_watchdogs(); flash_erase_page(AUDIO_FILE_FLASH_OFFSET,AUDIO_FILE_MAX_SIZE/HFFLASH_PAGE_SIZE); http_req.resource = url.resource; hfhttp_prepare_req(hhttp,&http_req,HDR_ADD_CONN_CLOSE); hfhttp_add_header(hhttp,"Range","bytes=0"); if((rv=hfhttp_send_request(hhttp,&http_req))!=HF_SUCCESS) { u_printf("http send request fail\n"); goto exit; } content_data = (char*)hfmem_malloc(256); if(content_data==NULL) { rv= -HF_E_NOMEM; goto exit; } total_size=0; bzero(content_data,256); while((read_size=hfhttp_read_content(hhttp,content_data,256))>0) { hfgpio_fset_out_high(HFGPIO_F_NREADY); flash_write(AUDIO_FILE_FLASH_OFFSET+total_size,content_data,read_size,0); total_size+=read_size; hfgpio_fset_out_low(HFGPIO_F_NREADY); u_printf("download file:[%d] [%d]\r",total_size,read_size); } hfgpio_fset_out_low(HFGPIO_F_NREADY); exit: hfsys_enable_all_soft_watchdogs(); if(temp_buf!=NULL) hfmem_free(temp_buf); if(content_data!=NULL) hfmem_free(content_data); if(hhttp!=0) hfhttp_close_session(&hhttp); hfgpio_fset_out_low(HFGPIO_F_NREADY); return rv; }
USER_FUNC void upnp_main_thread(void* arg) { int upnp_fd; uint32_t if_addr; fd_set sockfd_set; int max_fd ; struct timeval tv; char *pkt_buffer; int ret,i; char *p=0; #define UPNP_RECV_PACKET_SIZE (1024) extern int hfnet_enable_multicast(int enable); hfnet_enable_multicast(1); pkt_buffer = hfmem_malloc(UPNP_RECV_PACKET_SIZE); if(pkt_buffer==NULL) { //u_printf("no mem\n"); return; } while(1) { if((if_addr=get_if_ip_addr())==0) //µÃµ½Ä£¿éµ±Ç°ipµØÖ· kim { msleep(500); continue; } get_mac_addr(); //u_printf("kim+++ if_addr is %x\n",if_addr); upnp_fd = create_multicast_socket(if_addr); if(upnp_fd<0) return; else break; } //tcp server listenfd = socket(AF_INET, SOCK_STREAM, 0); memset((char*)&servaddr,0,sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_port = htons(30001); servaddr.sin_addr.s_addr=htonl(INADDR_ANY); bind(listenfd,(struct sockaddr *)&servaddr,sizeof(servaddr)); listen(listenfd,10); //u_printf("tcp server bind ok!\n"); if(listenfd > upnp_fd) max_fd =listenfd; else max_fd =upnp_fd; maxi = -1; for(i=0;i<MAXCLIENT;i++) { client[i] = -1; } // while(1) { int recvsize=0; tv.tv_sec=0; tv.tv_usec=200; ////u_printf("time=%d\n",hfsys_get_time()); FD_ZERO(&sockfd_set); FD_SET(upnp_fd,&sockfd_set); FD_SET(listenfd,&sockfd_set); for(i=0;i<MAXCLIENT;i++) { if(client[i]>=0) { FD_SET(client[i],&sockfd_set); if(client[i] > max_fd) max_fd =client[i]; } } /* count++; if(count == 1000) { //u_printf("send alive package\r\n"); send_alive_packet(upnp_fd,pkt_buffer,UPNP_RECV_PACKET_SIZE,if_addr); count = 0; } */ ret=select(max_fd+1,&sockfd_set,NULL,NULL,&tv); if(ret<=0) { //send_alive_packet(upnp_fd,pkt_buffer,UPNP_RECV_PACKET_SIZE,if_addr); continue; } if(FD_ISSET(listenfd, &sockfd_set)) //s2 { clilen = sizeof(cliaddr); connfd = accept(listenfd,(struct sockaddr *)&cliaddr,&clilen); for(i=0;i<MAXCLIENT;i++) { if(client[i]<0) { client[i] = connfd; maxi = maxi+1; //u_printf("accept client socket : %d client count : %d\n",connfd,maxi+1); break; } } if(i == MAXCLIENT) { //u_printf("too many clients\r\n"); } /*FD_SET(connfd, &sockfd_set); //½«ÒÑÁ¬½Ósocket ¼ÓÈëselect if(connfd > max_fd) max_fd = connfd; */ //if(i > maxi) if(--ret<=0) continue; } for(i=0;i<=maxi;i++) //¼ì²éËùÓеÄÒÑÁ¬½ÓsocketÓÐÎÞÊý¾Ý //s3 { if(((sockfd = client[i])<0)) continue; if(FD_ISSET(sockfd, &sockfd_set)) { if((recv_num =recv(sockfd,tcpserver_buf,sizeof(tcpserver_buf),0))>0) { while(tcp_send_finish == 0) { u_printf("busy,try late again\r\n"); msleep(10); } tcp_send_finish = 0; ////u_printf("recv data bytes:%d\n %s\r\n",recv_num,tcpserver_buf); if(recv_num <400) //·ÀÖ¹Á½ÌõÏûÏ¢Õ³Á¬ { TCP_Encode(); //add tcp identification code u_printf("FW to MCU,LOCAL TCP,TCP fd is %d:\r\n%s\r\n\r\n",sockfd,tcpserver_encodedbuf); hfuart_send(HFUART0,tcpserver_encodedbuf,strlen(tcpserver_encodedbuf), 50); // if(tcp_uartfd == 0) //{ tcp_uartfd = sockfd; } else { u_printf("recv num is %d, a catastrophe.Get rid of it\r\n",recv_num); } tcp_send_finish = 1; //²âÊÔ²éѯÉ豸Óà /* if((p = strstr(tcpserver_buf,"info"))!= NULL) //ÊÖ»ú²éѯÉ豸ÐÅÏ¢ { //u_printf("send info\r\n"); write(sockfd,info,strlen(info)); } else if((p = strstr(tcpserver_buf,"channel"))!= NULL) //ÊÖ»ú²éѯ°²È«Ä£Ê½´ò¿ª¹Ø±ÕµÄ״̬ { //u_printf("send channel\r\n"); write(sockfd,channel,strlen(channel)); } */ memset(tcpserver_encodedbuf,0,400); memset(tcpserver_buf,0,400); } else { close(sockfd); //FD_CLR(sockfd, &sockfd_set); client[i] = -1; maxi=maxi -1; //u_printf("delet client socket ,client count : %d\n",maxi+1); } if(--ret <= 0) break; } } if(FD_ISSET(upnp_fd, &sockfd_set)) //s1 { struct sockaddr_in fromaddr; socklen_t sockaddr_size = sizeof(struct sockaddr_in); memset(pkt_buffer,0,UPNP_RECV_PACKET_SIZE); recvsize = recvfrom(upnp_fd, (char*)pkt_buffer, UPNP_RECV_PACKET_SIZE-4, 0,(struct sockaddr *) &fromaddr, &sockaddr_size); // //u_printf("kim+++ Broadcast from ip:%x, port:%x\n",fromaddr.sin_addr.s_addr,fromaddr.sin_port); if (recvsize < 0) { //u_printf("recv() fail\n"); } else { if(strstr(pkt_buffer,"Lucis-tech")!=NULL) { //u_printf("recv length=%d,buffer is %s\n",recvsize,pkt_buffer); if(Sync_Flag == 1) //only after mcu sync Fa info to wifi { //u_printf("test AAA\r\n"); send_msearch_rsp_packet(&fromaddr); } } } if(--ret<=0) continue; } } if(pkt_buffer!=NULL) hfmem_free(pkt_buffer); return ; }