亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? smsc_sema.c

?? 主要包括sms網關和wap網關實現說明和源碼
?? C
?? 第 1 頁 / 共 4 頁
字號:
static int sema_msg_free(sema_msg *msg) {    if(msg == NULL) return 0;    gw_free(msg);    return 1;}static sema_msglist* sema_msglist_new(void) {    struct sema_msglist *mlist = NULL;    mlist = gw_malloc(sizeof(struct sema_msglist));    memset(mlist, 0, sizeof(struct sema_msglist));      mlist->first = NULL;    mlist->last = NULL;    mlist->count = 0;    return mlist;}static void sema_msglist_free(sema_msglist *mlist) {    struct sema_msg *pmsg = NULL;    if(mlist == NULL) return;     while( sema_msglist_pop(mlist, &pmsg) == 1 )  {	if(pmsg==NULL) break;	sema_msg_free(pmsg);	pmsg = NULL;    }    gw_free(mlist);    mlist->count = 0;}static int sema_msglist_push(sema_msglist *plist, sema_msg *pmsg) {    struct sema_msg * lmsg = NULL;    if(plist == NULL) {	info(0, "msglist_push: NULL msg list");	goto error;    }    if(pmsg == NULL) {	info(0, "msglist_push: NULL input");	goto error;    }    /* If list is completely empty. */    if( plist->first == NULL ) {	plist->last = pmsg;	plist->first = pmsg;	pmsg->prev = NULL;	pmsg->next = NULL;    }    else{	lmsg=plist->last;	lmsg->next=pmsg;	pmsg->prev=lmsg;	pmsg->next=NULL;	plist->last=pmsg;    }    plist->count += 1;    return 1;error:    error(0, "msglist_push: error");    return 0;}static int sema_msglist_pop(sema_msglist *plist, sema_msg **msg) {   if(plist == NULL) {	info(0, "msglist_pop: NULL list");	goto no_msg;    }    if(plist->first == NULL) {	goto no_msg;    }    *msg = plist->first;    if(plist->last == *msg) {	plist->first = NULL;	(*msg)->prev = NULL;	plist->last = NULL;    }     else {	plist->first = (*msg)->next;	plist->first->prev = NULL; 	if(plist->first->next == NULL) 	    plist->last = plist->first;    }    plist->count -= 1;    return 1;no_msg:    return 0;}static int X28_open_data_link(char* device){    int fd = -1, iret;    struct termios tios;    info(0,"open serial device %s",device);    fd = open(device, O_RDWR|O_NONBLOCK|O_NOCTTY);    if(fd==-1) {	error(errno, "sema_open_data_link: error open(2)ing the character device <%s>",	      device);	if(errno == EACCES)	    error(0, "sema_open_data_link: user has no right to access the serial device");	return -1;    }    tcgetattr(fd, &tios);    cfsetospeed(&tios, B4800);  /* check radio pad parameter*/    cfsetispeed(&tios, B4800);    kannel_cfmakeraw(&tios);    tios.c_iflag |= IGNBRK|IGNPAR|INPCK|ISTRIP;    tios.c_cflag |= (CSIZE|HUPCL | CREAD | CRTSCTS);    tios.c_cflag ^= PARODD;    tios.c_cflag |=CS7;    iret = tcsetattr(fd, TCSANOW, &tios);    if(iret == -1){	error(errno,"sema_open_data_link: fail to set termios attribute");	goto error;    }    tcflush(fd, TCIOFLUSH);    return fd;  error:    return -1;}static int X28_reopen_data_link(int oldpadfd ,char* device){    int nret = 0;    if(oldpadfd > 0){	nret= close(oldpadfd);	if(nret == -1){	    error(errno,"sema_reopen_data_link: close device file failed!!");	}    }    sleep(1);    return X28_open_data_link(device);}	static int X28_close_send_link(int padfd){    unsigned char discnntbuff[5];    unsigned char readbuff[1024];    unsigned char finishconfirm[]="CLR CONF\0";    int nret = 0, readall = 0;    time_t tstart;    time(&tstart);    sprintf(discnntbuff,"%cCLR\r",0x10);    memset(readbuff,0,sizeof(readbuff));    /* what ever is the close return, data mode is unreliable now*/    x28_data_mode = X28_COMMAND_MODE;    if(padfd <= 0)	goto datalink_error;    while((time(NULL) - tstart) < INTERNAL_DISCONNECT_TIMEVAL){	nret =write(padfd, discnntbuff, 5);	if(nret == -1){	    if(errno == EAGAIN || errno ==EINTR) continue;	    else{		goto datalink_error;	    }	}		sleep(1); /*wait 1 senconds for virtual link break*/		nret=read(padfd, readbuff+readall,128);	if(nret == -1){	    if(errno == EAGAIN || errno ==EINTR) continue;	    else{		goto datalink_error;	    }	}	if(nret >0){	    readall += nret;	    if(strstr(readbuff,finishconfirm))		return 1;	}    }    return 0;datalink_error:    error(errno,"sema_close_send_link, device file error");    return -1;}static int X28_open_send_link(int padfd, char *nua) {    char readbuff[1024];     char writebuff[129];    char smscbuff[129];    int readall = 0, readonce = 0, writeonce = 0, writeall = 0, i = 0;    char X28prompt[]="*\r\n\0";    time_t timestart;      debug("smsc.sema", 0, "sema_open send link: call smsc  <%s> for <%i> seconds",	  nua, (int)INTERNAL_CONNECT_TIMEVAL);	    /*  type few <cr> to invoke DTE */    writebuff[0] = '\r';           memset(readbuff,0,sizeof(readbuff));         for(i = 0; i <= 3; i++)    {	readonce = writeonce = -1;	writeonce = write(padfd, writebuff, 1);	if(writeonce < 1){	    if(errno == EINTR || errno == EAGAIN) continue;	    else{		goto datalink_error;	    }	}	usleep(1000); /* wait for prompt */	readonce = read(padfd, &readbuff[readall],1024);	if(readonce == -1){	    if(errno == EINTR || errno == EAGAIN) continue;	    else{		goto datalink_error;	    }	}	else	    readall += readonce;    }    if(strstr(readbuff, X28prompt) == NULL){	warning(0,"X28_open_send_link: can not read command prompt, abort");	return 0;    }	    /* second, connect to the smsc now */    memset(writebuff,0,sizeof(writebuff));    memset(readbuff,0,sizeof(readbuff));      writeall = readall = 0;    sprintf(writebuff, "%s\r", nua);    sprintf(smscbuff, "%s COM",nua);      while((size_t) writeall < strlen(writebuff)){	writeonce = -1;	writeonce = write(padfd, writebuff+writeall, strlen(writebuff)-writeall);	if(writeonce == -1){	    if(errno == EINTR || errno == EAGAIN)		continue;	    else		goto datalink_error;	}	if(writeonce > 0)	    writeall +=writeonce;    }    tcdrain(padfd);     usleep(1000*1000);/* wait for smsc answer */    time(&timestart);    while(time(NULL) - timestart < INTERNAL_CONNECT_TIMEVAL){	if((size_t) readall >= sizeof(readbuff))	    goto error_overflow;	/* We read 1 char a time */	readonce = read(padfd, &readbuff[readall], 1);	if(readonce == -1) {	    if(errno == EINTR || errno == EAGAIN) continue;	    else		goto datalink_error;	}	if(readonce > 0)	    readall += readonce;	/* Search for reponse line. */	if(readall > 2 &&	   readbuff[readall-1] == '\n' && 	   readbuff[readall-2] == '\r') {	    if(strstr(readbuff, smscbuff)) {		debug("smsc.sema", 0,		      "sema_open send link: smsc responded, virtual link established");		x28_data_mode = X28_MT_DATA_MODE; 		return 1;		    }	} 	usleep(1000);    }    info(0,"sema_open_send_link: connect timeout");    return 0;error_overflow:    warning(0, "sema_open_send_link: command buffer overflow");    return 0;datalink_error:    error(errno,"sema_open_send_link: device file error");    return -1;}static int X28_data_read(int padfd, char *cbuffer) {    char *p = NULL;    int ret,  len;    fd_set read_fd;    struct timeval tv, tvinit;    size_t readall;         tvinit.tv_sec = 0;    tvinit.tv_usec = 1000;         readall = 0;    for (;;) {	FD_ZERO(&read_fd);	FD_SET(padfd, &read_fd);	tv = tvinit;	ret = select(padfd + 1, &read_fd, NULL, NULL, &tv);	if (ret == -1) {	    if(errno==EINTR) goto got_data;	    if(errno==EAGAIN) goto got_data;	    error(errno, "Error doing select for fad");	    return -1;	} else if (ret == 0)	    goto got_data;	len = strlen(cbuffer);	ret = read(padfd,		   cbuffer + len,		   256);    	if (ret == -1) {            error(errno," read device file");	    return -1;	}	if (ret == 0)	    goto eof;       	readall += ret;	if ((size_t) len >  sizeof(cbuffer)- 256) {	    p = gw_realloc(cbuffer, sizeof(cbuffer) * 2);	    memset(p+len,0,sizeof(cbuffer)*2 - len);	    cbuffer = p;	}	if(readall > 0)	    break;    }     eof:    if(readall > 0)	ret = 1;    goto unblock;     got_data:    ret = 0;    goto unblock;unblock:    return ret;  }static int X28_data_send(int padfd, char *cbuffer,int sentonce) {    int len = 0, pos = 0,writeonce = 0,writeall = 0;     tcdrain(padfd);    len = strlen(cbuffer);    while(len > 0){	if(len < sentonce) {	    writeonce = write(padfd, cbuffer+pos, len);	}	else	    writeonce = write(padfd, cbuffer+pos, sentonce); 	if (writeonce == -1) {	    if(errno == EINTR || errno == EINTR)		continue;	    else{		goto error;	    }	}	if(writeonce > 0){	    len -= writeonce;	    pos += writeonce;	    writeall = pos;	}    }    tcdrain(padfd);    return writeall;error:    error(errno,"sema_send data error: device file error");    return -1;}static int X28_msg_pop(char *from, char *to){    char* Rbuff =NULL;    char* RRbuff = NULL;    char mobuff[] ="COM\r\n\0";    char mobuffend[] = "\r\0";    char prompbuff[] = "*\r\0";    int len = 0, Llen= 0, Rlen = 0,RRlen = 0;    len = strlen(from);    if(len <=0) goto no_msg;    /* trim off rabbish header */    while(*from == '\r' || *from == '\n'){	len = strlen(from);	if(len > 1){	    memmove(from, from +1, len-1);	    memset(from+(len-1), 0, 1);	}	else{	    memset(from,0,len);	    return -1;	}    }       len = strlen(from);     /*all kinds of useful infomation contains \r*/    if((Rbuff=memchr(from,'\r',len)) == NULL)	goto no_msg;     /*check if it is a command prompt *\r\n */    if((Rbuff -from) > 0 && *(Rbuff -1) == '*'){	if(strlen(Rbuff) < 2) goto no_msg; /*\n is not coming yet*/     	if(Rbuff -from > 4){ /* command info */	    Rlen = Rbuff -1 -from;	    memcpy(to,from,Rlen);	}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99精品视频中文字幕| 久久66热re国产| 91同城在线观看| 中文字幕一区二区三区四区| 99麻豆久久久国产精品免费| 亚洲狠狠丁香婷婷综合久久久| 欧美系列日韩一区| 麻豆成人91精品二区三区| 精品欧美乱码久久久久久1区2区| 国产尤物一区二区| 中文字幕成人网| 在线亚洲免费视频| 石原莉奈在线亚洲二区| 久久久久久综合| 91看片淫黄大片一级| 首页国产欧美久久| 久久久精品国产免大香伊| 91在线观看免费视频| 一区二区国产视频| 日韩美女天天操| 一本一道久久a久久精品综合蜜臀 一本一道综合狠狠老 | 精品三级在线观看| 成人av在线看| 午夜精品国产更新| 国产精品久久久久毛片软件| 欧美性videosxxxxx| 国产一区二区在线观看视频| 亚洲欧美乱综合| 欧美videos中文字幕| 99久久伊人精品| 日本不卡一区二区三区高清视频| 日本一区二区三区电影| 欧美日韩小视频| 丁香亚洲综合激情啪啪综合| 日本中文在线一区| 亚洲精品国产一区二区三区四区在线| 欧美一级精品在线| 色婷婷久久久综合中文字幕 | 国产在线乱码一区二区三区| 亚洲人成7777| 精品久久久久久久一区二区蜜臀| 91在线观看美女| 国产精品一区二区久久不卡| 亚洲3atv精品一区二区三区| 国产精品大尺度| 久久影视一区二区| 欧美一区二区视频观看视频| 91浏览器在线视频| 国产成人小视频| 久久国产三级精品| 天天射综合影视| 美女一区二区三区| 亚洲成人综合在线| 一区二区三区欧美| 成人免费在线观看入口| 国产日产亚洲精品系列| 日韩一卡二卡三卡| 4hu四虎永久在线影院成人| 一本到高清视频免费精品| 风间由美一区二区三区在线观看 | 欧美亚洲禁片免费| 99麻豆久久久国产精品免费优播| 国产精品综合一区二区三区| 麻豆国产一区二区| 美女在线观看视频一区二区| 亚洲第一主播视频| 亚洲图片欧美综合| 一级中文字幕一区二区| 亚洲三级小视频| 亚洲卡通欧美制服中文| 亚洲视频精选在线| 亚洲蜜臀av乱码久久精品| 亚洲视频免费在线观看| 亚洲色图欧美在线| 亚洲美女在线一区| 亚洲福利一二三区| 亚洲超碰精品一区二区| 三级久久三级久久| 日本不卡中文字幕| 美女在线观看视频一区二区| 久久国产综合精品| 国产999精品久久| 暴力调教一区二区三区| 成人午夜电影久久影院| 成人一区二区三区中文字幕| 粉嫩在线一区二区三区视频| 波多野结衣亚洲一区| 成人高清伦理免费影院在线观看| 北岛玲一区二区三区四区| 91在线观看高清| 欧美日韩在线免费视频| 欧美区在线观看| 欧美va天堂va视频va在线| 精品国产凹凸成av人网站| 日本一区二区久久| 亚洲欧美国产毛片在线| 日韩国产欧美三级| 狠狠狠色丁香婷婷综合激情 | eeuss影院一区二区三区| 99国产精品久久| 欧美丰满少妇xxxbbb| 欧美电影免费观看高清完整版 | 日韩一级在线观看| 国产网站一区二区三区| 国产精品白丝av| 91女厕偷拍女厕偷拍高清| 欧美日韩国产片| 久久蜜桃香蕉精品一区二区三区| 亚洲欧洲av在线| 琪琪一区二区三区| 风间由美一区二区三区在线观看 | 色一区在线观看| 欧美一级二级在线观看| 国产亚洲自拍一区| 一片黄亚洲嫩模| 国产一区亚洲一区| 欧美视频一区二区在线观看| 欧美xxxx在线观看| 一区二区三区四区视频精品免费 | 3d动漫精品啪啪1区2区免费| 久久久国产午夜精品| 一区二区国产视频| 国产成人无遮挡在线视频| 欧美日韩不卡一区| 国产精品免费人成网站| 日韩成人午夜精品| 91麻豆国产自产在线观看| 欧美一级欧美三级在线观看| 中文字幕欧美一| 国模少妇一区二区三区| 欧美无砖专区一中文字| 国产精品色婷婷| 久久99国产精品成人| 欧洲av在线精品| 国产精品免费aⅴ片在线观看| 日日骚欧美日韩| 色婷婷综合久久久久中文一区二区| 欧美不卡一区二区| 视频一区免费在线观看| 色国产精品一区在线观看| 久久精品视频一区二区三区| 美国欧美日韩国产在线播放| 色悠悠亚洲一区二区| 国产精品三级久久久久三级| 免费在线看一区| 欧美日韩精品三区| 亚洲在线观看免费| 99re亚洲国产精品| 中日韩免费视频中文字幕| 久久超碰97中文字幕| 欧美日韩精品一区二区| 亚洲最色的网站| 精品久久五月天| 免费高清在线一区| 91精品国产综合久久福利软件 | 亚洲柠檬福利资源导航| 成人永久aaa| 国产精品无码永久免费888| 国产一区二区免费在线| 精品免费日韩av| 国产一区久久久| 久久精品亚洲一区二区三区浴池| 国模无码大尺度一区二区三区| 欧美成人午夜电影| 国产一区二区女| 国产色一区二区| 成人av综合在线| 国产精品久久久久久亚洲伦| 不卡一区在线观看| 中文字幕视频一区二区三区久| av中文字幕在线不卡| 亚洲欧美aⅴ...| 欧美私人免费视频| 日本欧美一区二区在线观看| 日韩一级免费一区| 韩国欧美一区二区| 国产精品午夜免费| 一本色道久久综合狠狠躁的推荐 | 国产精品免费网站在线观看| 成人免费视频一区| 亚洲日本va午夜在线电影| 在线观看不卡视频| 奇米精品一区二区三区四区| 日韩美女视频在线| 国产91精品一区二区| 亚洲婷婷在线视频| 欧美日韩在线不卡| 精品在线播放免费| 欧美国产亚洲另类动漫| 日本韩国欧美在线| 日韩av中文字幕一区二区三区| 成人综合婷婷国产精品久久蜜臀 | 国产亚洲综合性久久久影院| 成人综合在线视频| 一级日本不卡的影视| 欧美一区二区福利视频| 国产盗摄女厕一区二区三区 | 国产精品久久久久9999吃药| 91黄视频在线| 久久国产麻豆精品|