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

📄 cmpp.cpp

📁 手机开发环境BREW实例
💻 CPP
📖 第 1 页 / 共 3 页
字号:
				m_sSMBuf[m_lBufIdx4MulSM].sCmppMsg.uMsgBody
					.sMsgSubmit.Msg_Fmt = m_bMsgCoding;

				strcpy(m_sSMBuf[m_lBufIdx4MulSM].sCmppMsg.uMsgBody
					.sMsgSubmit.Msg_src, m_szSPID);//信息内容来源(SP_ID)
				strcpy(m_sSMBuf[m_lBufIdx4MulSM].sCmppMsg.uMsgBody
					.sMsgSubmit.FeeType, m_szFeeType);//资费类别
				strcpy(m_sSMBuf[m_lBufIdx4MulSM].sCmppMsg.uMsgBody
					.sMsgSubmit.FeeCode, m_szFeeValue);//资费代码(以分为单位)

				strcpy(m_sSMBuf[m_lBufIdx4MulSM].sCmppMsg.uMsgBody
					.sMsgSubmit.Valid_Time, m_szExpireTime);//存活有效期
				strcpy(m_sSMBuf[m_lBufIdx4MulSM].sCmppMsg.uMsgBody
					.sMsgSubmit.At_Time, m_szScheduleTime);//定时发送时间
				strcpy(m_sSMBuf[m_lBufIdx4MulSM].sCmppMsg.uMsgBody
					.sMsgSubmit.Src_terminal_id, m_szSPNum);//源终端MSISDN号码

				m_sSMBuf[m_lBufIdx4MulSM].sCmppMsg.uMsgBody
					.sMsgSubmit.DestUsr_tl = 0;
				m_sSMBuf[m_lBufIdx4MulSM].sCmppMsg.uMsgBody
					.sMsgSubmit.Msg_Length = (unsigned char)m_lMsgContentLen;
				if(m_sSMBuf[m_lBufIdx4MulSM].sCmppMsg.uMsgBody
					.sMsgSubmit.Msg_Length)
				{
					if(m_sSMBuf[m_lBufIdx4MulSM].sCmppMsg.uMsgBody
						.sMsgSubmit.Msg_Length > MAX_LEN_CONTENT)
						m_sSMBuf[m_lBufIdx4MulSM].sCmppMsg.uMsgBody
						.sMsgSubmit.Msg_Length = MAX_LEN_CONTENT;
					memcpy(m_sSMBuf[m_lBufIdx4MulSM].sCmppMsg.uMsgBody
						.sMsgSubmit.Msg_Content, 
						m_BMsgContent, 
						m_sSMBuf[m_lBufIdx4MulSM].sCmppMsg.uMsgBody
						.sMsgSubmit.Msg_Length);
				}
				else
				{
					m_sSMBuf[m_lBufIdx4MulSM].sCmppMsg.uMsgBody
						.sMsgSubmit.Msg_Length = 
						strlen((char *)m_sSMBuf[m_lBufIdx4MulSM]
						.sCmppMsg.uMsgBody.sMsgSubmit.Msg_Content);
					if(m_sSMBuf[m_lBufIdx4MulSM].sCmppMsg.uMsgBody
						.sMsgSubmit.Msg_Length > MAX_LEN_CONTENT)
						m_sSMBuf[m_lBufIdx4MulSM].sCmppMsg.uMsgBody
						.sMsgSubmit.Msg_Length = MAX_LEN_CONTENT;
					strncpy((char *)m_sSMBuf[m_lBufIdx4MulSM].sCmppMsg
						.uMsgBody.sMsgSubmit.Msg_Content, 
						(char *)m_BMsgContent, MAX_LEN_CONTENT);
				}

				m_sSMBuf[m_lBufIdx4MulSM].sCmppMsg.sMsgHead
					.Command_ID = htonl(CMPP_SUBMIT);
				m_sSMBuf[m_lBufIdx4MulSM].sCmppMsg.sMsgHead
					.Sequence_ID = htonl(++m_dwSequenceNO);

				m_sSMBuf[m_lBufIdx4MulSM].bFlag = BUF_PENDING;
			}
		}
		m_sSMBuf[m_lBufIdx4MulSM].sCmppMsg.uMsgBody.sMsgSubmit.DestUsr_tl++;

		//OK!下面代码行:strncpy(..)将要把一个手机号码放入包中,在放入之前,加上前缀
		char szMobileIDWithPreFix[21 * 2 + 1];	//加上前缀(如果需要)后的手机号码
		AddPreFix(pcPos, m_szMobileIDFix, szMobileIDWithPreFix);
		if(strlen(szMobileIDWithPreFix) > 21)
		{
			return false;
		}
		strncpy(m_sSMBuf[m_lBufIdx4MulSM].sCmppMsg.uMsgBody
			.sMsgSubmit.Dest_terminal_id + (DWORD)(MAX_LEN_MOBILE_ID + 1) 
			* (m_sSMBuf[m_lBufIdx4MulSM].sCmppMsg.uMsgBody
			.sMsgSubmit.DestUsr_tl - 1), 
			szMobileIDWithPreFix, MAX_LEN_MOBILE_ID);
		if(m_sSMBuf[m_lBufIdx4MulSM].sCmppMsg.uMsgBody
			.sMsgSubmit.DestUsr_tl >= m_lSendMaxNumPerPk)
		{
			m_sSMBuf[m_lBufIdx4MulSM].bFlag = BUF_READY;
			//放入缓冲区的内容位置入到m_cQueueReady
			m_lBufIdx4MulSM = -1;
		}
		pcPos = strtok(NULL, szSeps);
	}

	return true;
}

long CCMPP::SetMobileID(BSTR newVal)
{
	USES_CONVERSION;
	strncpy(m_szMobileID, W2A(newVal), MAX_BUF_LEN_MOBILE_ID);

	return ERR_OK;
}

long CCMPP::SetMsgContent(VARIANT newVal)
{
	if(newVal.vt & VT_UI1 && newVal.vt & VT_ARRAY)
	{
		unsigned int i;
		for(i = newVal.parray->rgsabound->lLbound; i < ((MAX_BUF_LEN_CONTENT > newVal.parray->rgsabound->cElements)?newVal.parray->rgsabound->cElements:MAX_BUF_LEN_CONTENT); i++)
		{
			m_BMsgContent[i] = ((BYTE*)((newVal.vt & VT_BYREF)?(*newVal.pparray)->pvData:newVal.parray->pvData))[i];
		}
		m_lMsgContentLen = i;
	}
	if(newVal.vt & VT_BSTR)
	{
		USES_CONVERSION;
		strncpy((char *)m_BMsgContent, 
			W2A((newVal.vt & VT_BYREF)?*newVal.pbstrVal:newVal.bstrVal), 
			MAX_BUF_LEN_CONTENT);
		m_lMsgContentLen = strlen((char *)m_BMsgContent);
	}

	return ERR_OK;
}

long CCMPP::Submit(BSTR bStrMobileID, VARIANT *pMsgContent)
{
	long plError = ERR_OK;

	if(!m_bIsBinded)
	{
		plError = ERR_BIND_FAIL;
		goto SUBMIT_EXIT;
	}

	if(bStrMobileID)
	{
		SetMobileID(bStrMobileID);
		if(pMsgContent->vt != VT_ERROR)
		{
			//单条发送
			SetMsgContent(*pMsgContent);
			if(!AddMobileID(bStrMobileID))
			{
				plError = ERR_BUF_FULL;
				goto SUBMIT_EXIT;
			}
			if(m_lBufIdx4MulSM >= 0)
			{
				m_sSMBuf[m_lBufIdx4MulSM].bFlag = BUF_READY;
				//放入缓冲区的内容位置入到m_cQueueReady
				m_lBufIdx4MulSM = -1;
			}
		}
		else
		{
			//继续多条发送
			if(!AddMobileID(bStrMobileID))
			{
				plError = ERR_BUF_FULL;
				goto SUBMIT_EXIT;
			}
		}
	}
	else
	{
		//结束多条发送
		if(m_lBufIdx4MulSM >= 0)
		{
			m_sSMBuf[m_lBufIdx4MulSM].bFlag = BUF_READY;
			//放入缓冲区的内容位置入到m_cQueueReady
			m_lBufIdx4MulSM = -1;
		}
		if(pMsgContent->vt != VT_ERROR)
		{
			//开始多条发送
			SetMsgContent(*pMsgContent);
		}
	}

SUBMIT_EXIT:
	return ERR_OK;
}

void CCMPP::SetPara(eParaType eInParaType, void * newVal)
{
	switch(eInParaType)
	{
	case SendMaxNumPerPk:
		if(*((long *)newVal) > 0 && *((long *)newVal) <= MAX_DEST_USR)
			m_lSendMaxNumPerPk = *((long *)newVal);
		break;
	case Timeout4Connect:
		if(*((long *)newVal) >= 0 && *((long *)newVal) <= MAX_TIMEOUT)
			m_lTimeout4Connect = *((long *)newVal);
		break;
	case Timeout4Recv:
		if(*((long *)newVal) >= 0 && *((long *)newVal) <= MAX_TIMEOUT)
			m_lTimeout4Recv = *((long *)newVal);
		break;
	case PauseTime4Recv:
		if(*((long *)newVal) >= 0 && *((long *)newVal) <= MAX_TIMEOUT)
			m_lPauseTime4Recv = *((long *)newVal);
		break;
	case PauseTime4Stop:
		if(*((long *)newVal) >= 0 && *((long *)newVal) <= MAX_TIMEOUT)
			m_lPauseTime4Stop = *((long *)newVal);
		break;
	case SendIntervalTime:
		if(*((long *)newVal) >= 0 && *((long *)newVal) <= MAX_TIMEOUT)
			m_lSendIntervalTime = *((long *)newVal);
		break;
	case Timeout4Resp:
		if(abs(*((long *)newVal)) <= MAX_TIMEOUT)
			m_lTimeout4Resp = *((long *)newVal);
		break;
	case ExpireTime:
		{
			USES_CONVERSION;

			strcpy(m_szExpireTime, W2A((BSTR)newVal));
			if(CheckTime(m_szExpireTime))
			{
				//strcat(m_szExpireTime, "032+");
			}
			else
				m_szExpireTime[0] = 0;
			break;
		}
	case FeeMobileID:
		{
			USES_CONVERSION;
			strncpy(m_szFeeMobileID, W2A((BSTR)newVal), MAX_LEN_MOBILE_ID);
			break;
		}
	case FeeType:
		{
			sprintf(m_szFeeType, "%02d", *((BYTE *)newVal));
			break;
		}
	case FeeUserType:
		{
			m_bFeeUserType = *((BYTE *)newVal);
			break;
		}
	case FeeValue:
		{
			sprintf(m_szFeeValue, "%d", *((long *)newVal));
			break;
		}
	case MsgCoding:
		{
			m_bMsgCoding = *(BYTE *)newVal;
			break;
		}
	case MobileIDFix:
		{
			USES_CONVERSION;
			char *pszNewVal = W2A((BSTR)newVal);
			if(strlen(pszNewVal) >= sizeof(m_szMobileIDFix))
			{//过长
				printf("设置MobileIDFix属性的字符串过长!");
			}
			strcpy(this->m_szMobileIDFix, pszNewVal);
		}
	case Priority:
		{
			m_bPriority = *(BYTE *)newVal;
			break;
		}
	case RegDeliveryFlag:
		{
			m_bRegDeliveryFlag = *(BYTE *)newVal;
			break;
		}
	case Reserve:
		{
			USES_CONVERSION;
			char *pszVal = W2A((BSTR)newVal);
			if(strlen(pszVal) > 8)
			{
				printf("给Reserve属性所赋的字符串超过8个字节长!");
			}

			strcpy(this->m_szReserve, pszVal);
			break;
		}
	case ScheduleTime:
		{
			USES_CONVERSION;

			strcpy(m_szScheduleTime, W2A((BSTR)newVal));
			if(!CheckTime(m_szScheduleTime))
			{
				m_szScheduleTime[0] = 0;
			}
			break;
		}
	case SeviceType:
		{
			USES_CONVERSION;
			strncpy(m_szServiceType, W2A((BSTR)newVal), 10);
			break;
		}
	case SMCID:
		{
			m_dwSMCID = *(long *)newVal;
			break;
		}
	case SPID:
		{
			USES_CONVERSION;
			strncpy(m_szSPID, W2A((BSTR)newVal), 6);
			break;
		}
	case SPNum:
		{
			USES_CONVERSION;
			strncpy(m_szSPNum, W2A((BSTR)newVal), MAX_LEN_MOBILE_ID);
			break;
		}
	case TPpid:
		{
			m_bTPpid = *(BYTE *)newVal;
			break;
		}
	case TPudhi:
		{
			m_bTPudhi = *(BYTE *)newVal;
			break;
		}
	case Version:
		{
			m_bVersion = *(BYTE *)newVal;
			break;
		}

	}


	return;//ERR_OK;
}

long CCMPP::Query(long lDateTime, BSTR bStrServiceCode)
{
	DWORD dwRet;
	long plError = ERR_OK;

	USES_CONVERSION;

	if(!m_bIsBinded)
	{
		plError = ERR_BIND_FAIL;
		goto QUERY_EXIT;
	}

	BZERO(m_sCmppMsg);
	m_sCmppMsg.sMsgHead.Total_Length = htonl(sizeof(_CMPP_HEAD)
		+ sizeof(_CMPP_QUERY));
	m_sCmppMsg.sMsgHead.Command_ID = htonl(CMPP_QUERY);
	m_sCmppMsg.sMsgHead.Sequence_ID = htonl(++m_dwSequenceNO);

	sprintf(m_sCmppMsg.uMsgBody.sMsgQuery.szTime, 
		"%8d", lDateTime);
	if(bStrServiceCode)
	{
		m_sCmppMsg.uMsgBody.sMsgQuery.bQueryType = 1;
		strncpy(m_sCmppMsg.uMsgBody.sMsgQuery.szQueryCode, 
			W2A(bStrServiceCode), 10);
	}

	fd_set	sFDS4Write;
	FD_ZERO(&sFDS4Write);
	FD_SET(m_sSocket4MT, &sFDS4Write);
	dwRet = select(0, NULL, &sFDS4Write, NULL, NULL);
	if(dwRet == SOCKET_ERROR)
	{
		m_dwLastErr4Sys = GetLastError();
		goto QUERY_EXIT;
	}
	if(dwRet == 0 || !FD_ISSET(m_sSocket4MT, &sFDS4Write))
	{
		goto QUERY_EXIT;
	}

	WSASetEvent(m_hEvent4Socket);
	dwRet = send(m_sSocket4MT, (char *)&m_sCmppMsg, 
		ntohl(m_sCmppMsg.sMsgHead.Total_Length), 0);
	WSAResetEvent(m_hEvent4Socket);
	if(dwRet == SOCKET_ERROR)
	{
		m_dwLastErr4Sys = GetLastError();
		plError = ERR_SOCK_S_TIMEOUT;
		goto QUERY_EXIT;
	}
	if(dwRet != (sizeof(_CMPP_HEAD) + sizeof(_CMPP_QUERY))) 
	{
		plError = ERR_SOCK_S_FAIL;
		goto QUERY_EXIT;
	}

QUERY_EXIT:
	return plError;
}

long CCMPP::Unbind()
{
	DWORD dwRet;
	long plError = ERR_OK;

	if(!m_bIsBinded)return plError;

//#ifndef _DEBUG_FILE
	BZERO(m_sCmppMsg);
	m_sCmppMsg.sMsgHead.Total_Length = htonl(sizeof(_CMPP_HEAD));
	m_sCmppMsg.sMsgHead.Command_ID = htonl(CMPP_TERMINATE);
	m_sCmppMsg.sMsgHead.Sequence_ID = htonl(++m_dwSequenceNO);

	fd_set	sFDS4Write;
	FD_ZERO(&sFDS4Write);
	FD_SET(m_sSocket4MT, &sFDS4Write);
	m_sTimeval4Timeout.tv_sec = m_lTimeout4Connect / 1000000;
	m_sTimeval4Timeout.tv_usec = m_lTimeout4Connect % 1000000;
	dwRet = select(0, NULL, &sFDS4Write, NULL, &m_sTimeval4Timeout);
	if(dwRet == SOCKET_ERROR)
	{
		m_dwLastErr4Sys = GetLastError();
		plError = ERR_SOCK_SEL_FAIL;
		goto TERMINATE_EXIT;
	}
	if(dwRet == 0 || !FD_ISSET(m_sSocket4MT, &sFDS4Write))
	{
		plError = ERR_SOCK_S_TIMEOUT;
		goto TERMINATE_EXIT;
	}

	WSASetEvent(m_hEvent4Socket);
	send(m_sSocket4MT, (char *)&m_sCmppMsg, 
		ntohl(m_sCmppMsg.sMsgHead.Total_Length), 0);
	WSAResetEvent(m_hEvent4Socket);
	m_bIsUnbind = true;

TERMINATE_EXIT:
//#endif
	Stop();

	return plError;
}

long CCMPP::Active()
{
	DWORD dwRet;
	long plError = ERR_OK;

	if(!m_bIsBinded)
	{
		plError = ERR_BIND_FAIL;
		return plError;
	}
//#ifndef _DEBUG_FILE
	BZERO(m_sCmppMsg);
	m_sCmppMsg.sMsgHead.Total_Length = htonl(sizeof(_CMPP_HEAD));
	m_sCmppMsg.sMsgHead.Command_ID = htonl(CMPP_ACTIVE);
	m_sCmppMsg.sMsgHead.Sequence_ID = htonl(++m_dwSequenceNO);

	fd_set	sFDS4Write;
	FD_ZERO(&sFDS4Write);
	FD_SET(m_sSocket4MT, &sFDS4Write);
	m_sTimeval4Timeout.tv_sec = m_lTimeout4Connect / 1000000;
	m_sTimeval4Timeout.tv_usec = m_lTimeout4Connect % 1000000;
	dwRet = select(0, NULL, &sFDS4Write, NULL, &m_sTimeval4Timeout);
	if(dwRet == SOCKET_ERROR)
	{
		m_dwLastErr4Sys = GetLastError();
		plError = ERR_SOCK_SEL_FAIL;
		goto ACTIVE_EXIT;
	}
	if(dwRet == 0 || !FD_ISSET(m_sSocket4MT, &sFDS4Write))
	{
		plError = ERR_SOCK_S_TIMEOUT;
		goto ACTIVE_EXIT;
	}

	WSASetEvent(m_hEvent4Socket);
	send(m_sSocket4MT, (char *)&m_sCmppMsg, 
		ntohl(m_sCmppMsg.sMsgHead.Total_Length), 0);
	WSAResetEvent(m_hEvent4Socket);
	return plError;

ACTIVE_EXIT:
	Stop();
	return plError;
}

void main()
{
/*	int nTemp1,nTemp2;
	int i;
	nTemp1 = sizeof(_CMPP_BODY);
	nTemp2 = sizeof(_CMPP);
	i = sizeof(int);*/
}

⌨️ 快捷键说明

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