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

📄 hgsmsenddlg.cpp

📁 中国联通短信网络协议SGIP,可直接与联通短信网关相连
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	if(s.MessageCoding==24)	{
	    s.Priority=9;//优先级0-9从低到高,默认为0
	}
	sprintf(buffer,"SEND:铃声下载:%s %s",ID,sm);
	buffer[100]='\0';
	xprintf(buffer,"OK");
	SaveSubmitSm(s);
}

void CHgsmsendDlg::Submit_Sm_Cont(DEF_SENDPOCKET sendpocket)
{
	SUBMIT s;
	char short_msg[8192],buffer[1024];
    char temptime[11];
	int Fee=0,i;
	memset(temptime,0,sizeof(temptime));
	memset(&s,0,sizeof(SUBMIT));
	memset(buffer,0,sizeof(buffer));
	s.h.command_id=SGIP_SUBMIT;
    s.h.sequence.code=SOURCODE;///源结点码。
	MakeTime(temptime);
	s.h.sequence.time=atol(temptime);
	s.h.sequence.sequence=sequence_number++;
	sequence_number%=0x10000000;

	if (sendpocket.sourtele!=0l) sprintf(s.ChargeNumber,"8613%09ld",sendpocket.sourtele);
	s.UserCount=sendpocket.usercount;
	for (i=0;i<sendpocket.usercount;i++) {
		sprintf(s.UserNumber[i],"8613%09ld",sendpocket.desttele[i]);
	}
	s.MessageCoding=sendpocket.messagecoding;//unicode
	if (sendpocket.feetype==9) s.FeeType=3;   //发计费信息
	else s.FeeType=sendpocket.feetype;
	memcpy(s.CorpId,CORPID,5);
	strcpy(s.SPNumber,SPNUMBER);
	strcpy(s.ServiceType,sendpocket.servicetype);
    sprintf(s.FeeValue,"%d",sendpocket.feevalue);
    if (sendpocket.givenvalue!=0) sprintf(s.GivenValue,"%d",sendpocket.givenvalue);
    s.AgentFlag=1;
    s.MorelatetoMTFlag=sendpocket.morelatetomtflag;
    s.Priority=sendpocket.priority;
    //sprintf((s.ExpireTime,"%02d%02d%02d%02d%02d%02d032+",短消息寿命的终止时间,如果为空,表示使用短消息中心的缺省值。时间内容为16个字符,格式为"yymmddhhmmsstnnp" ,其中“tnnp”取固定值“032+”,即默认系统为北京时间);
    //sprintf(s.ScheduleTime,"%02d%02d%02d%02d%02d%02d032+",短消息定时发送的时间,如果为空,表示立刻发送该短消息。时间内容为16个字符,格式为“yymmddhhmmsstnnp” ,其中“tnnp”取固定值“032+”,即默认系统为北京时间);
    s.ReportFlag=1;
	if (sendpocket.feetype==9) {
		s.ReportFlag=3;   //发计费信息
	    s.MorelatetoMTFlag=3;
	}
    //s.TP_pid=GSM协议类型。详细解释请参考GSM03.40中的9.2.3.9;
    s.TP_udhi=sendpocket.tp_udhi; //GSM协议类型。详细解释请参考GSM03.40中的9.2.3.9;
    //s.MessageType=0;信息类型:0-短消息信息
    //memcpy(s.Reserve,保留,扩展用);
	int length=sendpocket.messagelength;
	if (length>250) {length=250;sendpocket.messagecontent[length]=0;}
	if(s.MessageCoding==8||s.MessageCoding==24)//unicode
	{
      length=AnsiToUnicode(sendpocket.messagecontent,short_msg,1);
      s.sm_length=length*2;
	  memcpy(s.short_message,short_msg,2*length);
	}
	else//plain
	{
		s.sm_length=length;
		memcpy(s.short_message,sendpocket.messagecontent,length);	
	}
	sprintf(buffer,"SEND:发送结构:13%09ld %s",sendpocket.desttele,sendpocket.messagecontent);
	buffer[100]='\0';
	xprintf(buffer,"OK");
	SaveSubmitSm(s);
}

void CHgsmsendDlg::Submit_Sm_7198(char *ID, int length, char *sm, BYTE saveflag, int data_coding, int esm_class,char * FeeValue,BYTE FeeType,char * ChargeID)
{
	SUBMIT s;
	char short_msg[8192],buffer[1024];
    char temptime[100];
	int Fee=0;
	memset(temptime,0,sizeof(temptime));
	memset(&s,0,sizeof(SUBMIT));
	memset(buffer,0,sizeof(buffer));
	s.h.command_id=SGIP_SUBMIT;
    s.h.sequence.code=SOURCODE;///源结点码。
	MakeTime(temptime);
	s.h.sequence.time=atol(temptime);
	s.h.sequence.sequence=sequence_number++;
	sequence_number%=0x10000000;
    memset(short_msg,0,sizeof(short_msg));
	if(strnicmp(ChargeID,"000",3)==0||strlen(ChargeID)==0) {
		   sprintf(s.ChargeNumber,"86%s",ID);
    }else {
		   sprintf(s.ChargeNumber,"86%s",ChargeID);
    }
	sprintf(s.UserNumber[0],"86%s",ID);
	s.UserCount=1;
	s.MessageCoding=data_coding;//unicode
	s.FeeType=FeeType;
	memcpy(s.CorpId,CORPID,5);
	strcpy(s.SPNumber,SPNUMBER);
	//memcpy(s.ServiceType,业务代码,strlen(业务代码));
   	Fee=atoi(FeeValue);
	if(Fee>=100000||Fee<0) {
		return;
		xprintf("Fee Error!!!","Error");
	}
    sprintf(s.FeeValue,"%d",Fee);
    //sprintf(s.GivenValue,"%d",取值范围0-99999,赠送用户的话费,单位为分,由SP定义);
    s.AgentFlag=1;
    s.MorelatetoMTFlag=2;
    // s.Priority=0;优先级0-9从低到高,默认为0
    //sprintf((s.ExpireTime,"%02d%02d%02d%02d%02d%02d032+",短消息寿命的终止时间,如果为空,表示使用短消息中心的缺省值。时间内容为16个字符,格式为"yymmddhhmmsstnnp" ,其中“tnnp”取固定值“032+”,即默认系统为北京时间);
    //sprintf(s.ScheduleTime,"02d%02d%02d%02d%02d%02d032+",短消息定时发送的时间,如果为空,表示立刻发送该短消息。时间内容为16个字符,格式为“yymmddhhmmsstnnp” ,其中“tnnp”取固定值“032+”,即默认系统为北京时间);
    s.ReportFlag=2;
    //s.TP_pid=GSM协议类型。详细解释请参考GSM03.40中的9.2.3.9;
    s.TP_udhi=esm_class; //GSM协议类型。详细解释请参考GSM03.40中的9.2.3.9;
    //s.MessageType=0;信息类型:0-短消息信息
    //memcpy(s.Reserve,保留,扩展用);
	if (strlen(sm)>140) sm[140]=0;
	if(s.MessageCoding==8||s.MessageCoding==24)//unicode
	{
      length=AnsiToUnicode(sm,short_msg,1);
      s.sm_length=length*2;
	  memcpy(s.short_message,short_msg,2*length);
	}
	else//plain
	{
		s.sm_length=length;
		memcpy(s.short_message,sm,length);	
	}
//	s.sm_length=length;
//	memcpy(s.short_message,sm,length);
	if(s.MessageCoding==24) {
     s.Priority=9;//优先级0-9从低到高,默认为0
	}
	sprintf(buffer,"SEND:7198:%s %s",ID,sm);
	buffer[100]='\0';
	xprintf(buffer,"OK");
	SaveSubmitSm(s);
}

void CHgsmsendDlg::SendACK(CString ip)
{
	sprintf(sendstring,"%c%c%c",STX,ACK,ETX);
	AddParityChar((BYTE *)sendstring);
	UdpSockSend.SocketSend(sendstring,strlen(sendstring),UDP_PORT_SEND,ip);
}

void CHgsmsendDlg::SendNak(int errcode, CString ip)
{
	sprintf(sendstring,"%c%c%02d%c",STX,NAK,errcode,ETX);
	AddParityChar((BYTE *)sendstring);
	UdpSockSend.SocketSend(sendstring,strlen(sendstring),UDP_PORT_SEND,ip);
}

void CHgsmsendDlg::Submit_Sm_Resp(SEQUENCE sequence)
{
	long i;
	HEADER h;
	char buffer[1024];
	char temptime[100];
	char result=0;
	char reserve[100];
	memset(buffer,0,sizeof(buffer));
	memset(&h,0,sizeof(HEADER));
	memset(temptime,0,sizeof(temptime));
	memset(reserve,0,sizeof(reserve));
	h.command_id=SGIP_SUBMIT_RESP;
	h.sequence.code=sequence.code;///源结点码。
	h.sequence.time=sequence.time;
	h.sequence.sequence=sequence.sequence;
	memset(sendstring,0,sizeof(sendstring));
	i=4L;
	ltocpy(sendstring+i,h.command_id);
	i+=4L;
	ltocpy(sendstring+i,h.sequence.code);
	i+=4L;
    ltocpy(sendstring+i,h.sequence.time);
	i+=4L;
	ltocpy(sendstring+i,h.sequence.sequence);
	i+=4L;
	sendstring[i]=result;
	i+=1L;
	memcpy(sendstring,reserve,8);
	i+=8L;
	h.command_length=i;
    ltocpy(sendstring,h.command_length);
    sprintf(buffer,"SERVERSEND: SUBMIT_SM_RESP To Client:%s    ",Client.IP);
	xprintf(buffer,"OK");
	Rsock.Send(sendstring,h.command_length);
}

void CHgsmsendDlg::OnBind() 
{
	Bind_Transmitter();
}

void CHgsmsendDlg::OnReset() 
{
	UnBind();
	WantReset=1;
}
/*
void CHgsmsendDlg::SaveLog(SEQUENCE sequence)
{
	CTime time;
	int i;
	FILE *hFile;
	char temp[512],buffer[512],temp1[512];

	memset(temp,0,sizeof(temp));
	memset(buffer,0,sizeof(buffer));
	memset(temp1,0,sizeof(temp1));
	time=time.GetCurrentTime();
	sprintf(temp,"e:/record/%02d%02d.txt",time.GetMonth(),time.GetDay());
	hFile=_fsopen(temp,"a",SH_DENYWR);
	if(hFile==NULL)	return;
    for (i=0;i<m_save.i;i++) {
		if (m_save.submit[i].h.sequence.sequence==sequence.sequence) {
			if(m_save.submit[i].MessageCoding==8) {
			  UnicodeToAnsi(m_save.submit[i].short_message,temp1);
			  sprintf(buffer,"手机号:%s 发送信息:%s 计费类型:%d 费率:%s 优惠:%s 时间:%02d:%02d",m_save.submit[i].ChargeNumber,temp1,m_save.submit[i].FeeType,m_save.submit[i].FeeValue,m_save.submit[i].GivenValue,time.GetHour(),time.GetMinute());
			  fprintf(hFile,"%s\n",buffer);
			}else {
			  sprintf(buffer,"手机号:%s 下载铃声 计费类型:%d 费率:%s 优惠:%s  时间:%02d:%02d",m_save.submit[i].ChargeNumber,m_save.submit[i].FeeType,m_save.submit[i].FeeValue,m_save.submit[i].GivenValue,time.GetHour(),time.GetMinute());
			  fprintf(hFile,"%s\n",buffer);
			}
			SaveFull(m_save.submit[i]);
		}
	}
	fclose(hFile);
}

void CHgsmsendDlg::SaveFull(SUBMIT s)
{
	CTime time;
	FILE *hFile;
	char temp[512],buffer[512];

	memset(buffer,0,sizeof(buffer));
	time=time.GetCurrentTime();
	sprintf(temp,"e:/record/%02d%02d.ful",time.GetMonth(),time.GetDay());
	hFile=_fsopen(temp,"a",SH_DENYWR);
	if(hFile==NULL)	return;
	sprintf(buffer,"%02d:%02d %12s %2d %12s %6s %d %6s %6s %3d %3d %3d %3ld",\
		time.GetHour(),time.GetMinute(),s.ChargeNumber,s.UserCount,s.UserNumber[0],\
		s.ServiceType,s.FeeType,s.FeeValue,s.GivenValue,s.MorelatetoMTFlag,s.TP_udhi,\
		s.MessageCoding,s.sm_length);
    fprintf(hFile,"%s\n",buffer);
	fclose(hFile);
}
*/
void CHgsmsendDlg::SaveLog(SEQUENCE sequence)
{
	CTime time;
	FILE *hFile,*hFile1;
	char temp[2048]={0},buffer[2048]={0},temp1[2048]={0};

    for (int i=0;i<m_save.i;i++) {
		if (m_save.submit[i].h.sequence.sequence==sequence.sequence) {
			count=0;
			time=time.GetCurrentTime();
			sprintf(temp,"/work/record/%02d%02d%02d.mt",time.GetYear()%100,time.GetMonth(),time.GetDay());
			hFile=_fsopen(temp,"a",SH_DENYWR);
			sprintf(temp1,"/work/record/%02d%02d%02d.mp",time.GetYear()%100,time.GetMonth(),time.GetDay());
			hFile1=_fsopen(temp1,"a",SH_DENYWR);
			if(hFile==NULL) return;
			if (m_save.submit[i].MessageCoding==8) {
				UnicodeToAnsi(m_save.submit[i].short_message,temp);
			}else {
				strcpy(temp,m_save.submit[i].short_message);
			}
			temp[140]='.';temp[141]=0;
			sprintf(buffer,"%02d:%02d:%02d %12s %2d %12s %6s %d %6s %3d %3d %3d %3d %s",\
				time.GetHour(),time.GetMinute(),time.GetSecond(),m_save.submit[i].ChargeNumber+2,\
				m_save.submit[i].UserCount,m_save.submit[i].UserNumber[0]+2,\
				m_save.submit[i].ServiceType,m_save.submit[i].FeeType,\
				m_save.submit[i].FeeValue,m_save.submit[i].TP_pid,\
				m_save.submit[i].TP_udhi,m_save.submit[i].MessageCoding,\
				m_save.submit[i].sm_length,temp);
			fprintf(hFile,"\n%s",buffer);
			fclose(hFile);
			fprintf(hFile1,"\n%010ld %07ld %s",\
				m_save.submit[i].h.sequence.time,m_save.submit[i].h.sequence.sequence,\
				buffer);
			fclose(hFile1);
		}
	}
}

void CHgsmsendDlg::MoLog(char *Stele,char *Id,char *Msg)
{
	CTime time=time.GetCurrentTime();
	FILE *hFile;
	char temp[512]={0},buffer[512]={0};
	sprintf(temp,"/work/record/%02d%02d%02d.mo",time.GetYear()%100,time.GetMonth(),time.GetDay());
	hFile=_fsopen(temp,"a",SH_DENYWR);
	if(hFile==NULL) return;
	memcpy(temp,Msg,60);temp[60]=0;
	if (Id[0]==0)
	sprintf(buffer,"%02d:%02d:%02d %-12s %-5s %-10s %-60s",\
				time.GetHour(),time.GetMinute(),time.GetSecond(),Stele,SPNUMBER,"-",temp);
	else
	sprintf(buffer,"%02d:%02d:%02d %-12s %-5s %-10s %-60s",\
				time.GetHour(),time.GetMinute(),time.GetSecond(),Stele,SPNUMBER,Id,temp);
	fprintf(hFile,"%s\n",buffer);
	fclose(hFile);
}

void CHgsmsendDlg::SaveReport(REPORT report)
{
	CTime time;
	FILE *hFile;
	char temp[512]={0},buffer[512]={0};

	time=time.GetCurrentTime();
	sprintf(temp,"/work/record/%02d%02d%02d.mr",time.GetYear()%100,time.GetMonth(),time.GetDay());
	hFile=_fsopen(temp,"a",SH_DENYWR);
	if(hFile==NULL) return;
	sprintf(buffer,"%010ld %07ld %02d:%02d:%02d %12s %2d %2d %2d",\
		report.sequence.time,report.sequence.sequence,\
		time.GetHour(),time.GetMinute(),time.GetSecond(),\
		report.UserNumber+2,report.ReportType,report.State,report.ErrorCode);
	fprintf(hFile,"\n%s",buffer);
	fclose(hFile);
}

int removefileflag=1;
void CHgsmsendDlg::RemoveOldFile()
{
	int i,month;
	CTime time;
	char filename[100];
	time=time.GetCurrentTime();
	if (time.GetHour()!=1) {
		removefileflag=1;
		return;
	}
	if (removefileflag==0) return;
	removefileflag=0;
	month=time.GetMonth();
	if (month>3) 
		month-=3;
	else if (month==3)
		month=12;
	else if (month==2)
		month=11;
	else if (month==1)
		month=10;
	for (i=1;i<=31;i++) {
		sprintf(filename,"e:/record/%02d%02d.txt",month,i);
		if (_access(filename,0)==0)
			remove(filename);
	}

}

void CHgsmsendDlg::Submit_Sm_Test(char *ID, char *sm, BYTE data_coding, int esm_class,BYTE FeeType,CString FeeValue )
{
	SUBMIT s;
	char short_msg[8192],buffer[1024];
    char temptime[100];
	int length=0,i=0,ptr=0,length1=0;
	UINT j=0;
	char flag=0x01,flag1='\f',flag2='\n';
	char temp[100];
	char graphic[150];
	int f=0;
	memset(graphic,0,sizeof(graphic));
	memset(temp,0,sizeof(temp));
	memset(temptime,0,sizeof(temptime));
	memset(&s,0,sizeof(SUBMIT));
	memset(buffer,0,sizeof(buffer));
	s.h.command_id=SGIP_SUBMIT;
    s.h.sequence.code=SOURCODE;///源结点码。
	MakeTime(temptime);
	s.h.sequence.time=atol(temptime);
	s.h.sequence.sequence=sequence_number++;
	sequence_number%=0x10000000;
    memset(short_msg,0,sizeof(short_msg));
	sprintf(s.ChargeNumber,"86%s",ID);
	sprintf(s.UserNumber[0],"86%s",ID);
	s.UserCount=1;
	s.MessageCoding=data_coding;//unicode
	s.FeeType=FeeType;
	memcpy(s.CorpId,CORPID,5);
	sprintf(s.SPNumber,"%s",SPNUMBER);
strcpy(s.ServiceType,"ZL");
	//memcpy(s.ServiceType,业务代码,strlen(业务代码));
    sprintf(s.FeeValue,"%s",FeeValue);
    //sprintf(s.GivenValue,"%d",10);
    s.AgentFlag=1;
    s.MorelatetoMTFlag=2;
    // s.Priority=0;优先级0-9从低到高,默认为0
    //sprintf((s.ExpireTime,"%02d%02d%02d%02d%02d%02d032+",短消息寿命的终止时间,如果为空,表示使用短消息中心的缺省值。时间内容为16个字符,格式为"yymmddhhmmsstnnp" ,其中“tnnp”取固定值“032+”,即默认系统为北京时间);
    //sprintf(s.ScheduleTime,"02d%02d%02d%02d%02d%02d032+",短消息定时发送的时间,如果为空,表示立刻发送该短消息。时间内容为16个字符,格式为“yymmddhhmmsstnnp” ,其中“tnnp”取固定值“032+”,即默认系统为北京时间);
    s.ReportFlag=2;
    //s.TP_pid=GSM协议类型。详细解释请参考GSM03.40中的9.2.3.9;
    s.TP_udhi=esm_class; //GSM协议类型。详细解释请参考GSM03.40中的9.2.3.9;
    //s.MessageType=0;信息类型:0-短消息信息
    //memcpy(s.Reserve,保留,扩展用);
     temp[0]='\\';
     temp[1]='1';
	 temp[2]='\\';
	 temp[3]='f';
	 temp[4]='\\';
	 temp[5]='n';
	for( i=0;i<256;i++) {
	   if(strnicmp(sm+i,temp,2)==0) {
         sm[i]=flag;
		 for(j=i+2;j<strlen(sm)+2;j++) {
			 sm[j-1]=sm[j];
		 }
	   }
	   if(strnicmp(sm+i,temp+2,2)==0) {
         sm[i]=flag1;
		 for(j=i+2;j<strlen(sm)+2;j++) {
			 sm[j-1]=sm[j];
		 }
	   }
	   if(strnicmp(sm+i,temp+4,2)==0) {
         sm[i]=flag2;
		 for(j=i+2;j<strlen(sm)+2;j++) {
			 sm[j-1]=sm[j];
		 }
	   }
	}
	length1=strlen(sm);
	if(!m_type) {
		for(int h=0;h<length1;h++) {
		   sscanf(sm+h,"%02x",&graphic[f]);
		   h++;
		   f++;

⌨️ 快捷键说明

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