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

📄 gsm_sms.cc

📁 开发手机AT指令的源码
💻 CC
📖 第 1 页 / 共 2 页
字号:
  {  case TimePeriod::NotPresent:    os << _("not present");    break;  case TimePeriod::Relative:    os << _("relative");    break;  case TimePeriod::Absolute:    os << _("absolute");    break;  default:    os << _("unknown");    break;  }  os << endl     << _("Reply path: ") << _replyPath << endl     << _("User data header indicator: ")     << (_userDataHeader.length()!=0) << endl     << _("Status report request: ") << _statusReportRequest << endl     << _("Message reference: ") << (unsigned int)_messageReference << endl     << _("Destination address: '") << _destinationAddress._number      << "'" << endl     << _("Protocol identifier: 0x") << hex      << (unsigned int)_protocolIdentifier << dec << endl     << _("Data coding scheme: ") << _dataCodingScheme.toString() << endl     << _("Validity period: ") << _validityPeriod.toString() << endl     << _("User data length: ") << (int)userDataLength() << endl     << _("User data header: 0x") << bufToHex((unsigned char*)                                              ((string)_userDataHeader).data(),                                              _userDataHeader.length())     << endl;     if(_dataCodingScheme.getAlphabet() != DCS_SIXTEEN_BIT_ALPHABET)       os << _("User data: '") << _userData << "'" << endl;     else       os << _("User data: '") << "0x" << bufToHex((unsigned char *)_userData.data(), _userData.length()) << "'" << endl;     os << dashes << endl << endl;     return os.str();}Address SMSSubmitMessage::address() const{  return _destinationAddress;}Ref<SMSMessage> SMSSubmitMessage::clone(){  Ref<SMSMessage> result = new SMSSubmitMessage(*this);  return result;}// SMSStatusReportMessage membersvoid SMSStatusReportMessage::init(){  _messageTypeIndicator = SMS_STATUS_REPORT;  _moreMessagesToSend = false;  _statusReportQualifier = false;  _messageReference = 0;  _status = SMS_STATUS_RECEIVED;}SMSStatusReportMessage::SMSStatusReportMessage(string pdu) throw(GsmException){  SMSDecoder d(pdu);  _serviceCentreAddress = d.getAddress(true);  _messageTypeIndicator = (MessageType)d.get2Bits(); // bits 0..1  assert(_messageTypeIndicator == SMS_STATUS_REPORT);  _moreMessagesToSend = ! d.getBit(); // bit 2  d.getBit();                   // bit 3  d.getBit();                   // bit 4  _statusReportQualifier = d.getBit(); // bit 5  _messageReference = d.getOctet();  _recipientAddress = d.getAddress();  _serviceCentreTimestamp = d.getTimestamp();  _dischargeTime = d.getTimestamp();  _status = d.getOctet();}string SMSStatusReportMessage::encode(){  SMSEncoder e;  e.setAddress(_serviceCentreAddress, true);  e.set2Bits(_messageTypeIndicator); // bits 0..1  e.setBit(! _moreMessagesToSend); // bit 2  e.setBit();                   // bit 3  e.setBit();                   // bit 4  e.setBit(_statusReportQualifier); // bit 5  e.setOctet(_messageReference);  e.setAddress(_recipientAddress);  e.setTimestamp(_serviceCentreTimestamp);  e.setTimestamp(_dischargeTime);  e.setOctet(_status);  return e.getHexString();}string SMSStatusReportMessage::toString() const{	ostringstream os;  os << dashes << endl     << _("Message type: SMS-STATUS-REPORT") << endl     << _("SC address: '") << _serviceCentreAddress._number << "'" << endl     << _("More messages to send: ") << _moreMessagesToSend << endl     << _("Status report qualifier: ") << _statusReportQualifier << endl     << _("Message reference: ") << (unsigned int)_messageReference << endl     << _("Recipient address: '") << _recipientAddress._number << "'" << endl     << _("SC timestamp: ") << _serviceCentreTimestamp.toString() << endl     << _("Discharge time: ") << _dischargeTime.toString() << endl     << _("Status: 0x") << hex << (unsigned int)_status << dec     << " '" << getSMSStatusString(_status) << "'" << endl     << dashes << endl << endl;  return os.str();}Address SMSStatusReportMessage::address() const{  return _recipientAddress;}Ref<SMSMessage> SMSStatusReportMessage::clone(){  Ref<SMSMessage> result = new SMSStatusReportMessage(*this);  return result;}// SMSCommandMessage membersvoid SMSCommandMessage::init(){  _messageTypeIndicator = SMS_COMMAND;  _messageReference = 0;  _statusReportRequest = true;  _protocolIdentifier = 0;  _commandType = EnquireSM;  _messageNumber = 0;  _commandDataLength = 0; }SMSCommandMessage::SMSCommandMessage(string pdu) throw(GsmException){  SMSDecoder d(pdu);  _serviceCentreAddress = d.getAddress(true);  _messageTypeIndicator = (MessageType)d.get2Bits(); // bits 0..1  assert(_messageTypeIndicator == SMS_COMMAND);  d.getBit();                   // bit 2  d.getBit();                   // bit 3  d.getBit();                   // bit 4  _statusReportRequest = d.getBit(); // bit 5  _messageReference = d.getOctet();  _protocolIdentifier = d.getOctet();  _commandType = d.getOctet();  _messageNumber = d.getOctet();  _destinationAddress = d.getAddress();  _commandDataLength = d.getOctet();  unsigned char *s =       (unsigned char*)alloca(sizeof(unsigned char) * _commandDataLength);  d.getOctets(s, _commandDataLength);}string SMSCommandMessage::encode(){  SMSEncoder e;  e.setAddress(_serviceCentreAddress, true);  e.set2Bits(_messageTypeIndicator); // bits 0..1  e.setBit();                   // bit 2  e.setBit();                   // bit 3  e.setBit();                   // bit 4  e.setBit(_statusReportRequest); // bit 5  e.setOctet(_messageReference);  e.setOctet(_protocolIdentifier);  e.setOctet(_commandType);  e.setOctet(_messageNumber);  e.setAddress(_destinationAddress);  e.setOctet(_commandData.length());  e.setOctets((const unsigned char*)_commandData.data(),              (short unsigned int)_commandData.length());  return e.getHexString();}string SMSCommandMessage::toString() const{	ostringstream os;  os << dashes << endl     << _("Message type: SMS-COMMAND") << endl     << _("SC address: '") << _serviceCentreAddress._number << "'" << endl     << _("Message reference: ") << (unsigned int)_messageReference << endl     << _("Status report request: ") << _statusReportRequest << endl     << _("Protocol identifier: 0x") << hex      << (unsigned int)_protocolIdentifier << dec << endl     << _("Command type: 0x") << hex << (unsigned int)_commandType     << dec << endl     << _("Message number: ") << (unsigned int)_messageNumber << endl     << _("Destination address: '") << _destinationAddress._number      << "'" << endl     << _("Command data length: ") << (unsigned int)_commandDataLength << endl     << _("Command data: '") << _commandData << "'" << endl     << dashes << endl << endl;  return os.str();}Address SMSCommandMessage::address() const{  return _destinationAddress;}Ref<SMSMessage> SMSCommandMessage::clone(){  Ref<SMSMessage> result = new SMSCommandMessage(*this);  return result;}// SMSDeliverReportMessage membersvoid SMSDeliverReportMessage::init(){  _messageTypeIndicator = SMS_DELIVER_REPORT;  _protocolIdentifierPresent = false;  _dataCodingSchemePresent = false;  _userDataLengthPresent = false;}SMSDeliverReportMessage::SMSDeliverReportMessage(string pdu)  throw(GsmException){  SMSDecoder d(pdu);  _serviceCentreAddress = d.getAddress(true);  _messageTypeIndicator = (MessageType)d.get2Bits(); // bits 0..1  assert(_messageTypeIndicator == SMS_DELIVER_REPORT);  d.alignOctet();               // skip to parameter indicator  _protocolIdentifierPresent = d.getBit(); // bit 0  _dataCodingSchemePresent = d.getBit(); // bit 1  _userDataLengthPresent = d.getBit(); // bit 2  if (_protocolIdentifierPresent)    _protocolIdentifier = d.getOctet();  if (_dataCodingSchemePresent)    _dataCodingScheme = d.getOctet();  if (_userDataLengthPresent)  {    unsigned char userDataLength = d.getOctet();    d.markSeptet();    if (_dataCodingScheme.getAlphabet() == DCS_DEFAULT_ALPHABET)    {      _userData = d.getString(userDataLength);      _userData = gsmToLatin1(_userData);    }    else    {                           // userDataLength is length in octets      unsigned char *s =        (unsigned char*)alloca(sizeof(unsigned char) * userDataLength);      d.getOctets(s, userDataLength);      _userData.assign((char*)s, userDataLength);    }  }}string SMSDeliverReportMessage::encode(){  SMSEncoder e;  e.setAddress(_serviceCentreAddress, true);  e.set2Bits(_messageTypeIndicator); // bits 0..1  e.alignOctet();               // skip to parameter indicator  e.setBit(_protocolIdentifierPresent); // bit 0  e.setBit(_dataCodingSchemePresent); // bit 1  e.setBit(_userDataLengthPresent); // bit 2  if (_protocolIdentifierPresent)    e.setOctet(_protocolIdentifier);  if (_dataCodingSchemePresent)    e.setOctet(_dataCodingScheme);  if (_userDataLengthPresent)  {    unsigned char userDataLength = _userData.length();    e.setOctet(userDataLength);    if (_dataCodingScheme.getAlphabet() == DCS_DEFAULT_ALPHABET)      e.setString(latin1ToGsm(_userData));    else      e.setOctets((unsigned char*)_userData.data(), userDataLength);  }  return e.getHexString();}string SMSDeliverReportMessage::toString() const{	ostringstream os;  os << dashes << endl     << _("Message type: SMS-DELIVER-REPORT") << endl     << _("SC address: '") << _serviceCentreAddress._number << "'" << endl     << _("Protocol identifier present: ") << _protocolIdentifierPresent     << endl     << _("Data coding scheme present: ") << _dataCodingSchemePresent << endl     << _("User data length present: ") << _userDataLengthPresent << endl;  if (_protocolIdentifierPresent)    os << _("Protocol identifier: 0x") << hex       << (unsigned int)_protocolIdentifier       << dec << endl;  if (_dataCodingSchemePresent)    os << _("Data coding scheme: ") << _dataCodingScheme.toString() << endl;  if (_userDataLengthPresent)  {    os << _("User data length: ") << (int)userDataLength() << endl;    if(_dataCodingScheme.getAlphabet() != DCS_SIXTEEN_BIT_ALPHABET)      os << _("User data: '") << _userData << "'" << endl;    else      os << _("User data: '") << "0x" << bufToHex((unsigned char *)_userData.data(), _userData.length()) << "'" << endl;  }  os << dashes << endl << endl;  return os.str();}Address SMSDeliverReportMessage::address() const{  assert(0);                    // not address, should not be in SMS store  return Address();}Ref<SMSMessage> SMSDeliverReportMessage::clone(){  Ref<SMSMessage> result = new SMSDeliverReportMessage(*this);  return result;}// SMSSubmitReportMessage membersvoid SMSSubmitReportMessage::init(){  _messageTypeIndicator = SMS_SUBMIT_REPORT;  _protocolIdentifierPresent = false;  _dataCodingSchemePresent = false;  _userDataLengthPresent = false;}SMSSubmitReportMessage::SMSSubmitReportMessage(string pdu) throw(GsmException){  SMSDecoder d(pdu);  _serviceCentreAddress = d.getAddress(true);  _messageTypeIndicator = (MessageType)d.get2Bits(); // bits 0..1  assert(_messageTypeIndicator == SMS_SUBMIT_REPORT);  _serviceCentreTimestamp = d.getTimestamp();  _protocolIdentifierPresent = d.getBit(); // bit 0  _dataCodingSchemePresent = d.getBit(); // bit 1  _userDataLengthPresent = d.getBit(); // bit 2  if (_protocolIdentifierPresent)    _protocolIdentifier = d.getOctet();  if (_dataCodingSchemePresent)    _dataCodingScheme = d.getOctet();  if (_userDataLengthPresent)  {    unsigned char userDataLength = d.getOctet();    d.markSeptet();    if (_dataCodingScheme.getAlphabet() == DCS_DEFAULT_ALPHABET)    {      _userData = d.getString(userDataLength);      _userData = gsmToLatin1(_userData);    }    else    {                           // _userDataLength is length in octets      unsigned char *s =        (unsigned char*)alloca(sizeof(unsigned char) * userDataLength);      d.getOctets(s, userDataLength);      _userData.assign((char*)s, userDataLength);    }  }}string SMSSubmitReportMessage::encode(){  SMSEncoder e;  e.setAddress(_serviceCentreAddress, true);  e.set2Bits(_messageTypeIndicator); // bits 0..1  e.setTimestamp(_serviceCentreTimestamp);  e.setBit(_protocolIdentifierPresent); // bit 0  e.setBit(_dataCodingSchemePresent); // bit 1  e.setBit(_userDataLengthPresent); // bit 2  if (_protocolIdentifierPresent)    e.setOctet(_protocolIdentifier);  if (_dataCodingSchemePresent)    e.setOctet(_dataCodingScheme);  if (_userDataLengthPresent)  {    e.setOctet(userDataLength());    if (_dataCodingScheme.getAlphabet() == DCS_DEFAULT_ALPHABET)      e.setString(latin1ToGsm(_userData));    else      e.setOctets((unsigned char*)_userData.data(), _userData.length());  }  return e.getHexString();}string SMSSubmitReportMessage::toString() const{	ostringstream os;  os << dashes << endl     << _("Message type: SMS-SUBMIT-REPORT") << endl     << _("SC address: '") << _serviceCentreAddress._number << "'" << endl     << _("SC timestamp: ") << _serviceCentreTimestamp.toString() << endl     << _("Protocol identifier present: ") << _protocolIdentifierPresent     << endl     << _("Data coding scheme present: ") << _dataCodingSchemePresent << endl     << _("User data length present: ") << _userDataLengthPresent << endl;  if (_protocolIdentifierPresent)    os << _("Protocol identifier: 0x") << hex       << (unsigned int)_protocolIdentifier       << dec << endl;  if (_dataCodingSchemePresent)    os << _("Data coding scheme: ") << _dataCodingScheme.toString() << endl;  if (_userDataLengthPresent)  {    os << _("User data length: ") << (int)userDataLength() << endl;    if(_dataCodingScheme.getAlphabet() != DCS_SIXTEEN_BIT_ALPHABET)      os << _("User data: '") << _userData << "'" << endl;    else      os << _("User data: '") << "0x" << bufToHex((unsigned char *)_userData.data(), _userData.length()) << "'" << endl;  }  os << dashes << endl << endl;  return os.str();}Address SMSSubmitReportMessage::address() const{  assert(0);                    // not address, should not be in SMS store  return Address();}Ref<SMSMessage> SMSSubmitReportMessage::clone(){  Ref<SMSMessage> result = new SMSSubmitReportMessage(*this);  return result;}

⌨️ 快捷键说明

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