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

📄 hgsmsenddlg.cpp

📁 中国联通短信网络协议SGIP,可直接与联通短信网关相连
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	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;
	sprintf(buffer,"SEND: UNBIND TO %s",SERVER_ADR);
	xprintf(buffer,"OK");
	m_connect=0;
   // TcpClient.SocketSend(sendstring,h.command_length,TCP_PORT,SERVER_ADR);
	TcpClient.SendTo((const void *)sendstring,h.command_length,TCP_PORT,SERVER_ADR);

}

void CHgsmsendDlg::MakeTime(char *buffer)
{
	CTime Time;
    Time=Time.GetCurrentTime();
	wsprintf(buffer,"%02d%02d%02d%02d%02d",Time.GetMonth(),Time.GetDay(),
		Time.GetHour(),Time.GetMinute(),Time.GetSecond());
}

void CHgsmsendDlg::OnDestroy() 
{
	CDialog::OnDestroy();
	UnBind();
	KillTimer(1);
	KillTimer(2);
	KillTimer(3);
	TcpSock.Close();
	TcpClient.Close();
	UdpSockRead.Close();
	UdpSockSend.Close();
}

void CHgsmsendDlg::Bind_Resp(SEQUENCE sequence)
{
	long i;
	HEADER h;
	char buffer[1024];
	char reserve[100];
	memset(reserve,0,sizeof(reserve));
	memset(&h,0,sizeof(HEADER));
	h.command_id=SGIP_BIND_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]=0;
	i+=1;
    memcpy(sendstring+i,reserve,8);
	i+=8;
	h.command_length=i;
    ltocpy(sendstring,h.command_length);
	sprintf(buffer,"SERVERSEND: BIND_RESP TO  CLIENT  %s    ",Client.IP);
	xprintf(buffer,"OK");
	Rsock.Send(sendstring,h.command_length);
}

void CHgsmsendDlg::Unbind_Resp(SEQUENCE sequence)
{

	long i;
	HEADER h;
	char buffer[1024];
	char temptime[11];
	memset(buffer,0,sizeof(buffer));
	memset(&h,0,sizeof(HEADER));
	memset(temptime,0,sizeof(temptime));
    h.command_length=20L;
	h.command_id=SGIP_UNBIND_RESP;
	h.sequence.code=sequence.code;///源结点码。
	h.sequence.time=sequence.time;
	h.sequence.sequence=sequence.sequence;
	memset(sendstring,0,sizeof(sendstring));
	ltocpy(sendstring,h.command_length);
	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);
    sprintf(buffer,"SEND: UNBIND_RESP TO %s",SERVER_ADR);
	xprintf(buffer,"OK");
	m_connect=0;
    TcpClient.SocketSend(sendstring,h.command_length,TCP_PORT,SERVER_ADR);
}

void CHgsmsendDlg::Deliver_Resp(SEQUENCE sequence)
{
	long i;
	HEADER h;
	char reserve[100];
	char buffer[1024];
	memset(buffer,0,sizeof(buffer));
	memset(reserve,0,sizeof(reserve));
	memset(&h,0,sizeof(HEADER));
	h.command_id=SGIP_DELIVER_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]=0;
	i+=1;
	memcpy(sendstring+i,reserve,8);
	i+=8;
	h.command_length=i;
	ltocpy(sendstring,h.command_length);
	sprintf(buffer,"SERVERSEND: DLIVER_RESP TO  CLIENT  %s    ",Client.IP);
	xprintf(buffer,"OK");
	Rsock.Send(sendstring,h.command_length);
}

void CHgsmsendDlg::Report_Resp(SEQUENCE sequence)
{
	long i;
	HEADER h;
	char reserve[100];
	char buffer[1024];
	memset(buffer,0,sizeof(buffer));
	memset(reserve,0,sizeof(reserve));
	memset(&h,0,sizeof(HEADER));
	h.command_id=SGIP_REPORT_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]=0;
	i+=1;
	memcpy(sendstring+i,reserve,8);
	i+=8;
	h.command_length=i;
	ltocpy(sendstring,h.command_length);
	sprintf(buffer,"SERVERSEND: REPORT_RESP TO CLIENT  %s    ",Client.IP);
	xprintf(buffer,"OK");
	Rsock.Send(sendstring,h.command_length);
}

void CHgsmsendDlg::UserRpt_Resp(SEQUENCE sequence)
{
	long i;
	HEADER h;
	char reserve[100];
	char buffer[1024];
	memset(buffer,0,sizeof(buffer));
	memset(reserve,0,sizeof(reserve));
	memset(&h,0,sizeof(HEADER));
	h.command_id=SGIP_USERRPT_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]=0;
	i+=1;
	memcpy(sendstring+i,reserve,8);
	i+=8;
	h.command_length=i;
	ltocpy(sendstring,h.command_length);
	sprintf(buffer,"SERVERSEND: USERRPT_RESP TO  CLIENT %s    ",Client.IP);
	xprintf(buffer,"OK");
	Rsock.Send(sendstring,h.command_length);
}

int  CHgsmsendDlg::GetStatus(char Result, char * Status)
{
	memset(Status,0,sizeof(Status));
	if(Result==0) {
		strcpy(Status,"OK");
		return 1;
	}else if(Result==1) {
		strcpy(Status,"非法登录");
		return 0;
	}else if(Result==2)	{
		strcpy(Status,"重复登录");
		return 0;
	}else if(Result==3)	{
		strcpy(Status,"连接过多");
		return 0;
	}else if(Result==4)	{
		strcpy(Status,"登录类型错");
		return 0;
	}else if(Result==5)	{
		strcpy(Status,"参数格式错");
		return 0;
	}else if(Result==6)	{
		strcpy(Status,"非法手机号码");
		return 0;
	}else if(Result==7)	{
		strcpy(Status,"消息ID错");
		return 0;
	}else if(Result==8)	{
		strcpy(Status,"信息长度错");
		return 0;
	}else if(Result==9) {
		strcpy(Status,"非法序列号");
		return 0;
	}else if(Result==10) {
		strcpy(Status,"非法操作GNS");
		return 0;
	}else if(Result==21) {
		strcpy(Status,"目的地址不可达");
		return 0;
	}else if(Result==22) {
		strcpy(Status,"路由错");
		return 0;
	}else if(Result==23) {
		strcpy(Status,"路由不存在");
		return 0;
	}else if(Result==24) {
		strcpy(Status,"计费号码无效");
		return 0;
	}else if(Result==25) {
		strcpy(Status,"用户不能通信");
		return 0;
	}else if(Result==26) {
		strcpy(Status,"手机内存不足");
		return 0;
	}else if(Result==27) {
		strcpy(Status,"手机不支持短消息");
		return 0;
	}else if(Result==28) {
		strcpy(Status,"手机接收短消息出现错误");
		return 0;
	}else if(Result==29) {
		strcpy(Status,"不知道的用户");
		return 0;
	}else if(Result==30) {
		strcpy(Status,"不提供此功能");
		return 0;
	}else if(Result==31) {
		strcpy(Status,"非法设备");
		return 0;
	}else if(Result==32) {
		strcpy(Status,"系统失败");
		return 0;
	}else 
		return 0;
}

void CHgsmsendDlg::OnTest() 
{
    int plong=0,mlong=0,i;
	BYTE FeeType=2;
	char PNum[50],Messa[512],temp[100],FeeValue[100];
	memset(FeeValue,0,sizeof(FeeValue));
	memset(temp,0,sizeof(temp));
    memset(PNum,0,sizeof(PNum));
    memset(Messa,0,sizeof(Messa));
	if(Tdlg.DoModal()==IDOK) { 
		Phone.Empty();
		Message.Empty();
		Phone=Tdlg.m_phone;
		Message=Tdlg.m_message;
	    plong=Phone.GetLength();
		mlong=Message.GetLength();
		if(plong<11) {
			::AfxMessageBox("手机号码错误请重新输入");
			return;
		}
		if(mlong<=0) {
			::AfxMessageBox(" 请输入信息");
			return;
		}
	    
	    for(i=0;i<plong;i++) {
		   temp[i]=Phone[i];
	
		}
 	    for(i=0;i<mlong;i++) {
			Messa[i]=Message[i];
		}		
	    sprintf(PNum,"%s",temp);
		if ((temp[0]=='8')&&(temp[1]=='6')) {
			ToInfoServer(PNum,Messa);
			return;
		}
	    Submit_Sm_Test(PNum,Messa,Tdlg.m_coding,0,Tdlg.m_FeeType,Tdlg.m_FeeValue);
	}
}

void CHgsmsendDlg::OnStatus() 
{
   Ldlg.DoModal();
}

void CHgsmsendDlg::TcpReset()
{
	    xprintf("TCP 端口复位","复位");
        TcpClient.Close();
		BOOL bFlag=TcpClient.Create(0,SOCK_STREAM,FD_CONNECT);
		if (!bFlag) {
			AfxMessageBox("Socket Failed!");
			TcpClient.Close();
			::PostQuitMessage(0);
			return;
		}
		if (!TcpClient.Connect(SERVER_ADR,TCP_PORT)) {
	     	int nErrno=TcpClient.GetLastError();
	    	if (nErrno!=WSAEWOULDBLOCK)	{
		    	AfxMessageBox("Socket Failed!");
			    TcpClient.Close();
			    ::PostQuitMessage(0);
			    return;
			}
		}
}

void CHgsmsendDlg::InitSockClient()
{
	sequence_number=0L;
	if (TcpClient.m_hSocket==INVALID_SOCKET) {
		BOOL bFlag=TcpClient.Create(0,SOCK_STREAM,FD_CONNECT);
		if (!bFlag)	{   
			AfxMessageBox("Socket Failed!");
			TcpClient.Close();
			::PostQuitMessage(0);
			return;
		}
	}
	
	if (!TcpClient.Connect(SERVER_ADR,TCP_PORT)) {
		int nErrno=TcpClient.GetLastError();
    	if (nErrno!=WSAEWOULDBLOCK)	{
	    	AfxMessageBox("Socket Failed!");
	    	TcpClient.Close();
	      	::PostQuitMessage(0);
	    	return;
		}
	}
}

void CHgsmsendDlg::Submit_Sm_Ring(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(业务代码));
	if ((FeeType==0)&&(Fee==20)) strcpy(s.ServiceType,"TH");
   	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(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);

⌨️ 快捷键说明

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