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

📄 smspdu.c

📁 pc 透過simens mobile phone 連線,可直接傳訊.
💻 C
📖 第 1 页 / 共 2 页
字号:
	|| (((dcs>>4)&15)==15 && ((dcs>>2)&1)==1)	) {*/    } else {      //all encodings of 8bit data or unknown things      if ((pdutype>>6)&1){	strcpy(ud,pdu+where+2+(udh_length*2));      } else {	strcpy(ud,pdu+where);		      }    }  }	  /*   * SMS values to readable text   */  if ((pdutype&3)==1) {    sprintf(&result[strlen(result)],"To: %s\n",oa.number);  } else {    sprintf(&result[strlen(result)],"From: %s\n",oa.number);  }  switch (pdutype&27) {  case (0<<3)+1: //VP not present    break;  case (1<<3)+1: //VP enhanced    break;  case (2<<3)+1: //VP relative    if (0<=atoi(scts) && atoi(scts)<=143) {      sprintf(temp,"%d minute(s)",atoi(scts)*5);    } else if (144<=atoi(scts) && atoi(scts)<=167) {      sprintf(temp,"%d minute(s)",(12*60)+((atoi(scts)-143)*30));    } else if (168<=atoi(scts) && atoi(scts)<=196) {      sprintf(temp,"%d day(s)",atoi(scts)-166);    } else if (197<=atoi(scts) && atoi(scts)<=255) {      sprintf(temp,"%d week(s)",atoi(scts)-192);    }    sprintf(&result[strlen(result)],"Valid for: %s\n",temp);    break;  case (3<<3)+1: //VP absolute    sprintf(&result[strlen(result)],"Valid until: %s\n",scts);    break;  case 0: //Service Center Time Stamp (SCTS)    sprintf(&result[strlen(result)],"Date: %s\n",scts);    break;  }  if (sca.length) {    sprintf(&result[strlen(result)],"SMSC number: %s\n",sca.number);  } else {    sprintf(&result[strlen(result)],"SMSC number: N/A\n");  }  sprintf(&result[strlen(result)],"PDU type: ");  if ((pdutype&3)==0) {    sprintf(&result[strlen(result)],"SMS-DELIVER ");  } else if ((pdutype&3)==1) {    sprintf(&result[strlen(result)],"SMS-SUBMIT ");  }  if ((pdutype>>7)&1) {    sprintf(&result[strlen(result)],"ReplyPath ");  }  if ((pdutype>>6)&1) {    sprintf(&result[strlen(result)],"UDHI ");  }  if ((pdutype>>5)&1) {    if ((pdutype&3)==0) {      sprintf(&result[strlen(result)],"SRI ");    } else if ((pdutype&3)==1) {      sprintf(&result[strlen(result)],"SRR ");    }  }  if ((pdutype>>2)&1) {    if ((pdutype&3)==0) {      sprintf(&result[strlen(result)],"MMS ");    } else if ((pdutype&3)==1) {      sprintf(&result[strlen(result)],"RejectDuplicate ");    }  }  sprintf(&result[strlen(result)],"\nData Coding Scheme: ");  if (((dcs>>6)&3)==0 || ((dcs>>6)&3)==1) {    if (dcs>>5) {      sprintf(&result[strlen(result)],"compressed ");    }    switch ((dcs>>2)&3) {    case 0:      sprintf(&result[strlen(result)],"7bit-GSM ");      break;    case 1:      sprintf(&result[strlen(result)],"8bit ");      break;    case 2:      sprintf(&result[strlen(result)],"16bit-UCS2 ");      break;    case 3: //reserved value      break;    }    if (dcs>>4) {      sprintf(&result[strlen(result)],"(Class %d)",dcs&3);    }    if (((dcs>>6)&3)==1) {      sprintf(&result[strlen(result)]," marked as auto-delete");	        }  } else if (((dcs>>6)&3)==3) {    if (((dcs>>4)&3)==3) {      if ((dcs>>2)) {	sprintf(&result[strlen(result)],"8bit ");      } else {	sprintf(&result[strlen(result)],"7bit-GSM ");      }      if (dcs>>4) {	sprintf(&result[strlen(result)],"(Class %d)",dcs&3);      }				    } else {      if (((dcs>>4)&3)==0) {	sprintf(&result[strlen(result)],"discarded 7bit-GSM, ");      } else if (((dcs>>4)&3)==1) {	sprintf(&result[strlen(result)],"stored 7bit-GSM, ");      } else if (((dcs>>4)&3)==2) {	sprintf(&result[strlen(result)],"stored 16bit-UCS2, ");      }      if ((dcs>>3)&1) {	sprintf(&result[strlen(result)],"active ");      } else {	sprintf(&result[strlen(result)],"inactive ");      }      switch (dcs&3) {      case 0:	sprintf(&result[strlen(result)],"voicemail message waiting ");	break;      case 1:	sprintf(&result[strlen(result)],"fax message waiting ");	break;      case 2:	sprintf(&result[strlen(result)],"e-mail message waiting ");	break;      case 3:	sprintf(&result[strlen(result)],"??? message waiting ");	break;      }      sprintf(&result[strlen(result)],"indication ");    }  } else {    sprintf(&result[strlen(result)],"Warning, reserved value %d was used", dcs);  }  sprintf(&result[strlen(result)],"\n");  sprintf(&result[strlen(result)],"Message length: %d\n",udl);  if (udh_length) {    sprintf(&result[strlen(result)],"Message Header:\n");    where=0;    do{      where+=2;      switch (hexstr2int(udh+where-2,2)) {      case 0: //multipart message (8bit sequence)	sprintf(&result[strlen(result)],"\tMultipart message: ");	where+=2;	if (hexstr2int(udh+where-2,2)==3) {	  sprintf(&result[strlen(result)],"sequence number=%d, part %d of %d",		  hexstr2int(udh+where,2),		  hexstr2int(udh+where+4,2),		  hexstr2int(udh+where+2,2));	  where+=6;	} else {	  sprintf(&result[strlen(result)],"...Error: incorrect length (%d), ",hexstr2int(udh+where-2,2));	  for (i=0;i<(hexstr2int(udh+where-2,2)*2);i+=2) {	    sprintf(&result[strlen(result)],"0x%c%c ",udh[where],udh[where+1]);	    where+=2;	  }	}	break;      case 8: //multipart message (16bit sequence)	sprintf(&result[strlen(result)],"\tMultipart message: ");	where+=2;	if (hexstr2int(udh+where-2,2)==4) {	  sprintf(&result[strlen(result)],"sequence number=%d, part %d of %d",		  hexstr2int(udh+where,4),		  hexstr2int(udh+where+6,2),		  hexstr2int(udh+where+4,2));	  where+=8;	} else {	  sprintf(&result[strlen(result)],"...Error: incorrect length (%d), ",hexstr2int(udh+where-2,2));	  for (i=0;i<(hexstr2int(udh+where-2,2)*2);i+=2) {	    sprintf(&result[strlen(result)],"0x%c%c ",udh[where],udh[where+1]);	    where+=2;	  }	}	break;      case 1: //special sms indication	sprintf(&result[strlen(result)],"\tIndications: ");	where+=2;	if (hexstr2int(udh+where-2,2)==2) {	  if ((hexstr2int(udh+where,2)&128)==128) {	    sprintf(&result[strlen(result)],"store");	  } else {	    sprintf(&result[strlen(result)],"discard");	  }	  switch (hexstr2int(udh+where,2)&3) {	  case 0: //voice	    sprintf(&result[strlen(result)],", voicemail message waiting");	    break;	  case 1: //fax	    sprintf(&result[strlen(result)],", fax message waiting");	    break;	  case 2: //electronic mail	    sprintf(&result[strlen(result)],", e-mail message waiting");	    break;	  case 3: //specified as "other"	  default:	    sprintf(&result[strlen(result)],", ??? message waiting");	    break;	  }					    	  sprintf(&result[strlen(result)],", message count=%d",hexstr2int(udh+where+2,2));	  where+=4;	} else {	  sprintf(&result[strlen(result)],"...Error: incorrect length (%d), ",hexstr2int(udh+where-2,2));	  for (i=0;i<(hexstr2int(udh+where-2,2)*2);i+=2) {	    sprintf(&udh[strlen(udh)],"0x%c%c ",udh[where],udh[where+1]);	    where+=2;	  }	}	break;      case 4: //application port addressing 8bit address	sprintf(&result[strlen(result)],"\tApplication port: ");	where+=2;	if (hexstr2int(udh+where-2,2)==2) {	  sprintf(&result[strlen(result)],"destination port=%d, originator port: %d",		  hexstr2int(udh+where,2),		  hexstr2int(udh+where+2,2));	  where+=4;	  break;	} else {	  sprintf(&result[strlen(result)],"...Error: incorrect length (%d), ",hexstr2int(udh+where-2,2));	  for (i=0;i<(hexstr2int(udh+where-2,2)*2);i+=2) {	    sprintf(&udh[strlen(udh)],"0x%c%c ",udh[where],udh[where+1]);	    where+=2;	  }	}	break;      case 5: //application port addressing 16bit address	sprintf(&result[strlen(result)],"\tApplication port: ");	where+=2;	if (hexstr2int(udh+where-2,2)==4) {	  sprintf(&result[strlen(result)],"destination port=%d, originator port: %d",		  hexstr2int(udh+where,4),		  hexstr2int(udh+where+4,4));	  where+=8;	  break;	} else {	  sprintf(&result[strlen(result)],"...Error: incorrect length (%d), ",hexstr2int(udh+where-2,2));	  for (i=0;i<(hexstr2int(udh+where-2,2)*2);i+=2) {	    sprintf(&udh[strlen(udh)],"0x%c%c ",udh[where],udh[where+1]);	    where+=2;	  }	}	break;      case 7: //UDH source indicator	sprintf(&result[strlen(result)],"\tThe following headers were created by the ");	where+=2;	if (hexstr2int(udh+where-2,2)==1) {	  switch (hexstr2int(udh+where,2)){	  case 0:	    sprintf(&result[strlen(result)],"sending unit");	    break;	  case 1:	    sprintf(&result[strlen(result)],"receiving unit");	    break;	  case 2:	    sprintf(&result[strlen(result)],"SMSC");	    break;	  default:	    sprintf(&result[strlen(result)],"...Error: unknown value %d",hexstr2int(udh+where,2));	    break;	  }	  where+=2;	} else {	  sprintf(&result[strlen(result)],"...Error: incorrect length (%d), ",hexstr2int(udh+where-2,2));	  for (i=0;i<(hexstr2int(udh+where-2,2)*2);i+=2) {	    sprintf(&udh[strlen(udh)],"0x%c%c ",udh[where],udh[where+1]);	    where+=2;	  }	}	break;      case 9: // wireless control message protocol	sprintf(&result[strlen(result)],"\tWCMP data unit: ");	where+=2;	for (i=0;i<(hexstr2int(udh+where-2,2)*2);i+=2) {	  sprintf(&udh[strlen(udh)],"0x%c%c ",udh[where],udh[where+1]);	  where+=2;	}	break;      case 0x70:      case 0x71:      case 0x72:      case 0x73:      case 0x74:      case 0x75:      case 0x76:      case 0x77:      case 0x78:      case 0x79:      case 0x7a:      case 0x7b:      case 0x7c:      case 0x7d:      case 0x7e:      case 0x7f: // SIM toolkit security header	sprintf(&result[strlen(result)],"\tSIM toolkit security header:");	where+=2;	if (hexstr2int(udh+where-2,2)!=0) {	  sprintf(&result[strlen(result)]," ...Error: incorrect length (%d), ",hexstr2int(udh+where-2,2));	  for (i=0;i<(hexstr2int(udh+where-2,2)*2);i+=2) {	    sprintf(&udh[strlen(udh)],"0x%c%c ",udh[where],udh[where+1]);	    where+=2;	  }	}	break;      default: //unknown header type	sprintf(&result[strlen(result)],"\tUnknown type (%02X): ",hexstr2int(udh+where-2,2));	where+=2;	for (i=0;i<(hexstr2int(udh+where-2,2)*2);i+=2) {	  sprintf(&udh[strlen(udh)],"0x%c%c ",udh[where],udh[where+1]);	  where+=2;	}	break;      }      sprintf(&result[strlen(result)],"\n");    } while (where<strlen(udh));  }  if (udl && ((((dcs>>6)&3)==0 && ((dcs>>2)&3)==0) // 00xx x00x (GSM-7bit)	      || (((dcs>>6)&3)==1 && ((dcs>>2)&3)==0) // 01xx x00x (GSM-7bit)	      || (((dcs>>4)&15)==12) // 1100 xxxx (GSM-7bit)	      || (((dcs>>4)&15)==13) // 1101 xxxx (GSM-7bit)	      || (((dcs>>4)&15)==15 && ((dcs>>2)&1)==0) // 1111 xxxx (GSM-7bit)	      || (((dcs>>6)&3)==0 && ((dcs>>2)&3)==2) //00xx x10x (UCS2)	      || (((dcs>>6)&3)==1 && ((dcs>>2)&3)==2) //01xx x10x (UCS2)	      || (((dcs>>4)&15)==14) // 1110 xxxx (UCS2)	      )) {    sprintf(&result[strlen(result)],"Message:\n%s\n",ud);  } else if (udl) {    sprintf(&result[strlen(result)],"Message (as hexstring):\n%s\n",ud);  }	  memset(pdu,0,1);  sprintf(pdu,"%s",result);}

⌨️ 快捷键说明

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