⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 smgp3.c.bak

📁 基于上海电信 sgmp3.0短信协议,实现的源程序,现网运行稳定,unix (freeBSD) 环境下编程.
💻 BAK
📖 第 1 页 / 共 5 页
字号:
#if 1
		// check resq 
		for(k=0; k<memsend; k++)
			if( 0 == strlen(resq[k].rq_submit_id)  )
				i++;
		if(i == memsend)
		{
			// resq is null 
			for(k = 0; k<memsend ; k++)
				if( strcmp(sendq[k].sq_submit_stat , "sub") ==0 )
					for( i=0; i< memsend ; i++ )
					{
						if( strlen(resq[i].rq_submit_id) == 0 )
						{
							strcpy(resq[i].rq_submit_id , sendq[k].sq_submit_id);
							strncpy(resq[i].rq_msgid, sendq[k].sq_submit_id, sizeof(resq[i].rq_msgid)-1);
							getdatetime(resq[i].rq_response_time);
							resq[i].rq_response_status = -3;
							resq[i].intime = time(NULL);
							n++;
						}
					}
		}
		else{
			
			for( k=0; k<memsend; k++ )
				if(strcmp(sendq[k].sq_submit_stat, "sub") ==0)
				{	
					for( i=0; i<memsend ; i++ )
						if(strcmp(resq[i].rq_submit_id , sendq[k].sq_submit_stat) ==0)
							// ignore 
							break ;

					for(i =0; i< memsend ; i++)
						if(strlen(resq[i].rq_submit_id) ==0)
						{
							strcpy(resq[i].rq_submit_id, sendq[k].sq_submit_id );
							strncpy(resq[i].rq_msgid, sendq[k].sq_submit_id, sizeof(resq[i].rq_msgid)-1);
							getdatetime(resq[i].rq_response_time);
							resq[i].rq_response_status = -3;
							resq[i].intime = time(NULL);
							n++;
						}
				}
		}
#endif 

	return n;
}

int Insertresq(RES_Q *resq, RES_Q tmp)
{
	int k=0, i=0;

	for(k =0 ; k< memsend ; k++)
		if(strlen(resq[k].rq_submit_id) ==0)
		{
			memcpy(&resq[k], &tmp, sizeof(RES_Q));
			return 0;
		}
	return -1; // buffer full 
}

int checkresqnum(RES_Q *resq)
{
	int k =0 , i=0;

	for(k=0; k< memsend ; k++)
		if(strlen(resq[k].rq_submit_id) ==0)
			i++;
	return i;
}

int CheckTimeout(SEND_Q *sendq)
{
	int i=0, count =0;
	
	for(	i=0;	i<memsend; i++)
		if( ( sendq[i].intime + timeout_no_submit_resp< time(NULL) ) && (strcmp(sendq[i].sq_submit_stat ,"sub") ==0) )
		{
			if(sendq[i].sq_pri <= retry_max)
			{
				// insert into send_log , failed
				InsertSendLog(&fsql_main, send_q_db,&sendq[i], -1);
				sendq[i].sq_id = 0;
				memset(&sendq[i], 0, sizeof(SEND_Q));
				continue;
			}
			sendq[i].intime = time(NULL);
			strcpy(sendq[i].sq_submit_stat, "");
			sendq[i].sq_pri--;
			count++;
		}
	return count;
}


int Countsendq(SEND_Q *sendq, int size )
{
	int i =0;
	int count =0;

//	INFO("DEBUG memsed:%d\n", memsend);
	for(i=0; i<size; i++)
	{
	//	INFO("DEBUG sendq[%d]->sq_id :%d\n", i, sendq[i].sq_id );
		if(sendq[i].sq_id<=0)
			count++;
	//	INFO("DEBUG count:%d\n",count);
	}
	return count;
}

int Countresq(RES_Q *resq, int size )
{
	int i =0;
	int count =0;

//	INFO("DEBUG memsed:%d\n", memsend);
	for(i=0; i<size; i++)
	{
	//	INFO("DEBUG sendq[%d]->sq_id :%d\n", i, sendq[i].sq_id );
		if( strlen(resq[i].rq_submit_id) ==0)
			count++;
	//	INFO("DEBUG count:%d\n",count);
	}
	return count;
}


int Countunsend(SEND_Q *sendq)
{
	int i =0;
	int count =0;

//	INFO("DEBUG memsed:%d\n", memsend);
	for(i=0; i<memsend; i++)
	{
	//	INFO("DEBUG sendq[%d]->sq_id :%d\n", i, sendq[i].sq_id );
		if(sendq[i].sq_id>0 && (strlen(sendq[i].sq_submit_stat) ==0) )
			count++;
	//	INFO("DEBUG count:%d\n",count);
	}
	return count;
}

/*把待发数据放入buffer*/
int CopyToBuffer(SEND_Q *map, int num,   SEND_Q temp)
{
	int k = 0;

//	INFO("[FUNCTION-CopyToBuffer]:  lock sendq buffer[%d] \n", num );
	
	k = FindPlace(map, memsend);
//	INFO("[FUNCTION-CopyToBuffer] k :%d\n", k);
	if(k >= 0)	//有位置可以放
	{
//	    INFO("[FUNCTION-CopyToBuffer] sendq_lock\n");
    	    pthread_mutex_lock(&sendq_lock[num]);
	    memcpy(&map[k], &temp, sizeof(SEND_Q));
//	    INFO("[FUNCTION-CopyToBuffer] sq_id :%d\n", map[k].sq_id);
	    map[k].intime = time(NULL);
	    pthread_mutex_unlock(&sendq_lock[num]);
//	    INFO("[FUNCTION-CopyToBuffer] sendq_unlock\n");
	}
	
//	INFO("[FUNCTION-CopyToBuffer]: unlock senq buffer[%d]\n", num);
	if(k < 0)	//MAP队列满
	{
		INFO("[FUNCTION-CopyToBuffer] send buffer[%d] full \n", num);
		return -1;
	}
	return 0;
}

int AllocateData( MYSQL_RES *result, char *deleteids)
{
	MYSQL_ROW row;
	SEND_Q send_tmp;
	int num =0, allrow=0;
	int ii =0,ret=0;
	
	allrow = mysql_num_rows(result);
	while( ( row = mysql_fetch_row(result) )!=NULL)
	{	
		send_tmp.length_pi = atoi(row[34]);
		send_tmp.length_mi = atoi(row[35]);
		send_tmp.sq_sms_length = atoi(row[36]);
		copy_send_q(&send_tmp, row);
//		strlcpy(send_tmp.sq_reg_gateway, send_tmp.sq_send, sizeof(send_tmp.sq_reg_gateway));
		strncpy(send_tmp.sq_reg_gateway,send_tmp.sq_send, sizeof(send_tmp.sq_reg_gateway) );
		send_tmp.sq_reg_gateway[sizeof(send_tmp.sq_reg_gateway) -1] ='\0';
		
		ret = CopyToBuffer(SENDQ[ii],ii, send_tmp);
		while(ret == -1)
		{
			if(ii == connections)
				ii =0;
			else
				ii++;
			ret = CopyToBuffer(SENDQ[ii],ii, send_tmp);
		}
		ii++;
		if( ii== connections)
			ii =0;
			
		if(num ==0)
			strcpy(deleteids,row[0]);
		else
			strcat(deleteids,row[0]);
		if(num < allrow-1)
		{
			strcat(deleteids, ",");
		}
		num ++;
	}
	INFO("[INFO-MAIN]: Deleteid [%s]\n", deleteids);
	return 0;
}

int read_uchar(unsigned char * dst, size_t siz, const unsigned char *key)
{
	int res;

	if ( (res = get_value_uchar(dst, siz, key)) == 0 ){
		INFO("[INFO]: get_conf: %s:  ==> %s\n", key, dst);
	}else{
		INFO("[-ERR]: get_conf: %s == NULL\n", key);
	}

	return res;
}

int read_int32(int * dst, const unsigned char *key)
{
	int res;

	if ( (res = get_value_int32(dst,key)) == 0 ){
		INFO("[INFO]: get_conf: %s:  ==> %d\n", key, *dst);
	}else{
		INFO("[-ERR]: get_conf: %s == NULL\n", key);
	}

	return res;
}


int read_uint32(unsigned int * dst, const unsigned char *key)
{
	int res;

	if ( (res = get_value_uint32(dst,key)) == 0 ){
		INFO("[INFO]: get_conf: %s:  ==> %u\n", key, *dst);
	}else{
		INFO("[-ERR]: get_conf: %s == NULL\n", key);
	}

	return res;
}

static int config(unsigned char *file)
{
    	int i=0;
    	char *value;
    	char cfgfile[256];

    	sprintf(cfgfile, "%s", file);
    	if (init_conf(cfgfile) != 0) 
	{
        	fprintf(stderr," [-ERR]: init_conf: failed\n");
        	return (-1);
    	}
    	
    	if (get_value_uchar(logfile, sizeof(logfile)-1, "LOG_FILE") !=0 ) goto CFGERR;
    	fprintf(stderr," [config]: logfile: %s\n", logfile);

    	if (read_int32(&smg_type, "SMG_TYPE") != 0) goto CFGERR;		
	if ((smg_type != 0) && (smg_type != 2)) goto CFGERR;
	if(smg_type == 0)
	{
		smg_recv_type = 1;
	}
	if (read_uchar(smg_host, sizeof(smg_host)-1, "SMG_HOST") != 0) goto CFGERR;
	if (read_int32(&smg_port, "SMG_PORT") != 0) goto CFGERR;
    	if (get_value_uchar(smg_user, sizeof(smg_user)-1, "SMG_USER") != 0) goto CFGERR;
	if (read_uchar(smg_user, sizeof(smg_user)-1, "SMG_USER") != 0) goto CFGERR;
	if (read_uchar(smg_pass, sizeof(smg_pass)-1, "SMG_PASS") != 0) goto CFGERR;
	
    	if (read_uchar(send_q_db, sizeof(send_q_db)-1, "SEND_Q_DB") != 0) goto CFGERR;
    	if (read_uchar(send_q_host, sizeof(send_q_host)-1, "SEND_Q_HOST") != 0) goto CFGERR;
    	if (read_uchar(send_q_user, sizeof(send_q_user)-1, "SEND_Q_USER") != 0) goto CFGERR;
    	if (read_uchar(send_q_pass, sizeof(send_q_pass)-1, "SEND_Q_PASS") != 0) goto CFGERR;
    	if (read_int32(&send_q_port, "SEND_Q_PORT") != 0) goto CFGERR;	
	       
	if (read_uchar(newspcode4, sizeof(newspcode4)-1, "NEWSPCODE4") != 0) goto CFGERR;
	
	//David for 2SP
    	if (read_uchar(media_db, sizeof(media_db)-1, "MEDIA_DB") != 0) goto CFGERR;
    	if (read_uchar(media_host, sizeof(media_host)-1, "MEDIA_HOST") != 0) goto CFGERR;
    	if (read_uchar(media_user, sizeof(media_user)-1, "MEDIA_USER") != 0) goto CFGERR;
    	if (read_uchar(media_pass, sizeof(media_pass)-1, "MEDIA_PASS") != 0) goto CFGERR;
    	if (read_int32(&media_port, "MEDIA_PORT") != 0) goto CFGERR;
	
	// For gateway argument
    	if (read_uchar(servicemedia_db, sizeof(servicemedia_db)-1, "SERVICEMEDIA_DB") != 0) goto CFGERR;
    	if (read_uchar(servicemedia_host, sizeof(servicemedia_host)-1, "SERVICEMEDIA_HOST") != 0) goto CFGERR;
    	if (read_uchar(servicemedia_user, sizeof(servicemedia_user)-1, "SERVICEMEDIA_USER") != 0) goto CFGERR;
    	if (read_uchar(servicemedia_pass, sizeof(servicemedia_pass)-1, "SERVICEMEDIA_PASS") != 0) goto CFGERR;
    	if (read_int32(&servicemedia_port, "SERVICEMEDIA_PORT") != 0) goto CFGERR;

    	if (read_int32(&memsend, "MEMSEND") != 0) goto CFGERR;
    	if (read_int32(&reportnum, "REPORTNUM") != 0) goto CFGERR;
    	if (read_int32(&reportnum, "REPORTNUM") != 0) goto CFGERR;
	if(read_int32(&socketbuffersize, "SOCKETBUFFER")!=0) goto CFGERR;

    	if (read_uchar(gateway_name, sizeof(gateway_name)-1, "GATEWAY_NAME") != 0) goto CFGERR;
    	if (read_uchar(province, sizeof(province)-1, "PROVINCE") != 0) goto CFGERR;
    	if (read_int32(&timeout_no_submit_resp,  "TIMEOUT_NO_SUBMIT_RESP") != 0) goto CFGERR;
    	read_int32(&expiretime, "EXPIRETIME");
    	if ((expiretime < 0) || (expiretime > 240))
        	expiretime = 0;
	if (read_int32(&priority,"PRIORITY") !=0) goto CFGERR;
    	if (get_value_int32(&retry_num, "RETRY_NUM") != 0) goto CFGERR;
    	if ((retry_num < 0) || (retry_num > 3)) retry_num = 3;
    	retry_max = -retry_num;

    	if (get_value_int32(&resnum, "RESNUM") != 0) goto CFGERR;
    	if ((resnum < 1) ) resnum = 10;

    	if (get_value_int32(&connections, "CONNECTIONS") != 0) goto CFGERR;
    	if(connections<=0 )
		connections = 1;

    	if (get_value_int32(&altq_num, "ALTQ_NUM") != 0) goto CFGERR;
    	if ((altq_num < 0) || (altq_num > 300)) altq_num = 20;
    	i = altq_num/10;
    	i = i * 10 + 10;
    	altq_timer = 1000 * 1000/i;
    	INFO("[INFO]: TIMER: %u,Send Speed limit %d.\n", altq_timer,altq_num);


    	if ((value = get_conf("ENABLE_FEETRIM")) != NULL) 
	{
        	if (strcmp(value, "YES") == 0) 
		{
            		feetrim_flag = 1;
            		INFO("[INFO]: ENABLE FREE TRIM\n");
        	}
    	}
        
        if ((value = get_conf("ISHAINANFLAG")) != NULL) 
	{
        	if (strcmp(value, "YES") == 0) 
		{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -