亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? gsm_sms_codec.c

?? Gsm手機(短信息,電話簿)開發庫C++源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
// *************************************************************************
// * GSM TA/ME library
// *
// * File:    gsm_sms_codec.cc
// *
// * Purpose: Coder and Encoder for SMS TPDUs
// *
// * Author:  Peter Hofmann (software@pxh.de)
// *
// * Created: 17.5.1999
// *************************************************************************

#ifdef HAVE_CONFIG_H
#include <gsm_config.h>
#endif
#include <gsmlib/gsm_nls.h>
#include <gsmlib/gsm_sysdep.h>
#include <gsmlib/gsm_sms_codec.h>
#include <gsmlib/gsm_util.h>
#include <time.h>
#include <strstream>
#include <iomanip>
#ifdef HAVE_STRING_H
#include <string.h>
#endif
#include <string>
using namespace std;
using namespace gsmlib;

// Address members

Address::Address(string number) : _plan(ISDN_Telephone)
{
  number = removeWhiteSpace(number);
  if (number.length() > 0 && number[0] == '+')
  {
    _type = International;
    _number = number.substr(1, number.length() - 1);
  }
  else
  {
    _type = Unknown;
    _number = number;
  }
}

string Address::toString() const
{
  if (_type == International)
    return "+" + _number;
  else
    return _number;
}

bool gsmlib::operator<(const Address &x, const Address &y)
{
  // normalize numbers according to the following two rules:
  // - prepend "+" if international number
  // - append 0s to the shorter number so that both numbers have equal length
  string xnumber = x._number;
  string ynumber = y._number;
  static string twenty0s = "00000000000000000000";

  if (x._type == Address::International) xnumber = "+" + xnumber;
  if (y._type == Address::International) ynumber = "+" + ynumber;
  
  while (xnumber.length() != ynumber.length())
    if (xnumber.length() < ynumber.length())
    {
      int diff = ynumber.length() - xnumber.length();
      xnumber += twenty0s.substr(0, (diff > 20 ? 20 : diff));
    }
    else
    {
      int diff = xnumber.length() - ynumber.length();
      ynumber += twenty0s.substr(0, (diff > 20 ? 20 : diff));
    }

  return xnumber < ynumber;
}

bool gsmlib::operator==(const Address &x, const Address &y)
{
  return x._number == y._number && x._plan == y._plan;
}

// Timestamp members

bool Timestamp::empty() const
{
  return _year == 0 && _month == 0 && _day == 0 && _hour == 0 && 
    _minute == 0 && _seconds == 0 && _timeZoneMinutes == 0;
}

string Timestamp::toString(bool appendTimeZone) const
{
  short timeZoneMinutes = _timeZoneMinutes;
  short timeZoneHours = timeZoneMinutes / 60;
  timeZoneMinutes %= 60;

  // format date and time in a locale-specific way
  struct tm t;
  t.tm_sec = _seconds;
  t.tm_min = _minute;
  t.tm_hour = _hour;
  t.tm_mon = _month - 1;
  // year 2000 heuristics, SMSs cannot be older than start of GSM network
  t.tm_year = _year < 80 ? _year + 100 : _year;
  t.tm_mday = _day;
  t.tm_isdst = -1;
  t.tm_yday = 0;
  t.tm_wday = 0;
  
#ifdef BROKEN_STRFTIME
  char formattedTime[1024];
  strftime(formattedTime, 1024, "%x %X", &t);
#else
  int formattedTimeSize = strftime(NULL, INT_MAX, "%x %X", &t) + 1;
  char *formattedTime = (char*)alloca(sizeof(char) * formattedTimeSize);
  strftime(formattedTime, formattedTimeSize, "%x %X", &t);
#endif

  if (! appendTimeZone)
    return formattedTime;

  ostrstream os;
  os << formattedTime << " (" << (_negativeTimeZone ? '-' : '+')
     << setfill('0') << setw(2) << timeZoneHours 
     << setw(2) << timeZoneMinutes << ')' << ends;
  char *ss = os.str();
  string result(ss);
  delete[] ss;
  return result;
}

bool gsmlib::operator<(const Timestamp &x, const Timestamp &y)
{
  // we don't take time zone info into account because
  // - it's more complicated to compute
  // - it might confuse the user for whom it's also too complicated
  if (x._year < y._year)
    return true;
  else if (x._year > y._year)
    return false;

  if (x._month < y._month)
    return true;
  else if (x._month > y._month)
    return false;

  if (x._day < y._day)
    return true;
  else if (x._day > y._day)
    return false;

  if (x._hour < y._hour)
    return true;
  else if (x._hour > y._hour)
    return false;

  if (x._minute < y._minute)
    return true;
  else if (x._minute > y._minute)
    return false;

  return x._seconds < y._seconds;
}

bool gsmlib::operator==(const Timestamp &x, const Timestamp &y)
{
  // we don't take time zone info in order to be consistent with operator<
  return x._year == y._year && x._month == y._month && x._day == y._day &&
    x._hour == y._hour && x._minute == y._minute && x._seconds == y._seconds;
}

// TimePeriod members

string TimePeriod::toString() const
{
  switch (_format)
  {
  case NotPresent:
    return _("not present");
  case Relative:
  {
    ostrstream os;
    if (_relativeTime <= 143)
      os << ((int)_relativeTime + 1) * 5 << _(" minutes");
    else if (_relativeTime <= 167)
      os << 12 * 60 + ((int)_relativeTime - 143) * 30 << _(" minutes");
    else if (_relativeTime <= 196)
      os << (int)_relativeTime - 166 << _(" days");
    else if (_relativeTime <= 143)
      os << (int)_relativeTime - 192 << _(" weeks");
    os << ends;
    char *ss = os.str();
    string result(ss);
    delete[] ss;
    return result;
  }
  case Absolute:
    return _absoluteTime.toString();
  default:
    return _("unknown");
  }
}

// DataCodingScheme members

string DataCodingScheme::toString() const
{
  string result;
  if (compressed()) result += _("compressed   ");
  if (messageWaitingIndication())
    switch (getMessageWaitingType())
    {
    case DCS_VOICEMAIL_MESSAGE_WAITING:
      result += _("voicemail message waiting");
      break;
    case DCS_FAX_MESSAGE_WAITING:
      result += _("fax message waiting");
      break;
    case DCS_ELECTRONIC_MAIL_MESSAGE_WAITING:
      result += _("electronic mail message waiting");
      break;
    case DCS_OTHER_MESSAGE_WAITING:
      result += _("other message waiting");
      break;
    }
  else
    switch (getAlphabet())
    {
    case DCS_DEFAULT_ALPHABET:
      result += _("default alphabet");
      break;
    case DCS_EIGHT_BIT_ALPHABET:
      result += _("8-bit alphabet");
      break;
    case DCS_SIXTEEN_BIT_ALPHABET:
      result += _("16-bit alphabet");
      break;
    case DCS_RESERVED_ALPHABET:
      result += _("reserved alphabet");
      break;
    }
  return result;
}

// SMSDecoder members

SMSDecoder::SMSDecoder(string pdu) : _bi(0), _septetStart(NULL)
{
  _p = new unsigned char[pdu.length() / 2];
  _op = _p;
  if (! hexToBuf(pdu, _p))
    throw GsmException(_("bad hexadecimal PDU format"), SMSFormatError);
  _maxop = _op + pdu.length() / 2;
}

void SMSDecoder::alignOctet()
{
  if (_bi != 0)
  {
    _bi = 0;
    ++_op;
  }
}
    
void SMSDecoder::alignSeptet()
{
  assert(_septetStart != NULL);
  while (((_op - _septetStart) * 8 + _bi) % 7 != 0) getBit();
}
    
unsigned char SMSDecoder::get2Bits()
{
  unsigned char result = getBit();
  return result | (getBit() << 1);
}

unsigned char SMSDecoder::getOctet()
{
  alignOctet();
  if (_op >= _maxop)
    throw GsmException(_("premature end of PDU"), SMSFormatError);
  return *_op++;
}

void SMSDecoder::getOctets(unsigned char* octets, unsigned short length)
{
  alignOctet();
  for (unsigned short i = 0; i < length; ++i)
  {
    if (_op >= _maxop)
      throw GsmException(_("premature end of PDU"), SMSFormatError);
    *octets++ = *_op++;
  }
}

string SMSDecoder::getSemiOctets(unsigned short length)
{
  string result;
  result.reserve(length);
  alignOctet();
  for (unsigned short i = 0; i < length; ++i)
  {
    if (_bi == 0)
    {
      if (_op >= _maxop)
        throw GsmException(_("premature end of PDU"), SMSFormatError);
      // bits 0..3 are most significant
      result += '0' + (*_op & 0xf);
      _bi = 4;
    }
    else
    {
      if (_op >= _maxop)
        throw GsmException(_("premature end of PDU"), SMSFormatError);
      // bits 4..7 are least significant, skip 0xf digit
      if ((*_op & 0xf0) != 0xf0)
        result += '0' + (*_op >> 4);
      _bi = 0;
      ++_op;
    }
  }
  alignOctet();
  return result;
}

unsigned long SMSDecoder::getSemiOctetsInteger(unsigned short length)
{
  unsigned long result = 0;
  alignOctet();
  for (unsigned short i = 0; i < length; ++i)
  {
    if (_bi == 0)
    {
      if (_op >= _maxop)
        throw GsmException(_("premature end of PDU"), SMSFormatError);
      // bits 0..3 are most significant
      result = result * 10 + (*_op & 0xf);
      _bi = 4;
    }
    else
    {
      if (_op >= _maxop)
        throw GsmException(_("premature end of PDU"), SMSFormatError);
      // bits 4..7 are least significant, skip 0xf digit
      if ((*_op & 0xf0) != 0xf0)
        result = result * 10 + (*_op >> 4);
      _bi = 0;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品77777竹菊影视小说| 久久亚洲一级片| 亚洲色图在线播放| 99v久久综合狠狠综合久久| 中文字幕亚洲欧美在线不卡| 成人a免费在线看| 亚洲视频免费观看| 欧美亚洲精品一区| 一区二区在线电影| 国产精品丝袜一区| 午夜精品久久久久久久99樱桃| 亚洲男人的天堂在线aⅴ视频| 一区二区三区电影在线播| 国产精品久久久久毛片软件| 亚洲欧洲制服丝袜| 亚洲丰满少妇videoshd| 日韩精品成人一区二区三区| 成人免费看片app下载| 亚洲男同性视频| 欧美中文字幕一区二区三区 | 亚洲一区在线观看网站| 欧美日韩综合色| 狠狠色狠狠色综合系列| 亚洲欧美中日韩| 欧美人牲a欧美精品| 国精产品一区一区三区mba视频| 日本一区二区三区视频视频| 欧美亚洲综合网| 国产一区二区在线视频| 一区二区三区蜜桃| 欧美本精品男人aⅴ天堂| 99久久精品免费| 七七婷婷婷婷精品国产| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 成人一区二区在线观看| 制服.丝袜.亚洲.另类.中文| 国产一区在线观看视频| 日韩久久一区二区| www国产成人| 欧美日韩一区久久| 本田岬高潮一区二区三区| 天使萌一区二区三区免费观看| 午夜精品成人在线| 国产农村妇女毛片精品久久麻豆| 欧美色偷偷大香| 成人开心网精品视频| 麻豆成人在线观看| 亚洲乱码国产乱码精品精的特点| 精品久久久久香蕉网| 日本乱码高清不卡字幕| 风间由美一区二区三区在线观看| 污片在线观看一区二区| 亚洲日本乱码在线观看| 26uuu国产电影一区二区| 亚洲国产一区二区在线播放| 色综合久久综合| 从欧美一区二区三区| 中文字幕日韩欧美一区二区三区| 成人小视频在线| 中文字幕永久在线不卡| 成人av综合一区| 最新久久zyz资源站| 欧美性感一类影片在线播放| 一区二区三区欧美激情| 日韩一级大片在线观看| 日本午夜精品一区二区三区电影| 日韩精品一区二区三区在线观看 | 国产女人aaa级久久久级| 欧美日韩不卡视频| 91麻豆免费看| 成人18视频在线播放| 成人在线视频首页| 国产精品一区二区久久不卡 | 黄色日韩三级电影| 免费av网站大全久久| 午夜久久久影院| 亚洲一区二区三区在线| 一区二区三区中文在线观看| 亚洲人被黑人高潮完整版| 国产精品久久午夜夜伦鲁鲁| 国产亚洲自拍一区| 国产视频一区在线播放| 国产色产综合色产在线视频| 精品国产一区二区三区久久影院| 欧美成人猛片aaaaaaa| 日韩欧美一区在线观看| 欧美成人一区二区三区在线观看| 日韩写真欧美这视频| 欧美一区二区观看视频| 欧美三日本三级三级在线播放| 91在线你懂得| 99久久久久免费精品国产| 成人毛片老司机大片| av电影在线观看一区| 国产成人av一区| 成人高清av在线| 久草中文综合在线| 国产69精品久久777的优势| 国产成人综合在线| 国产成人三级在线观看| 风间由美一区二区三区在线观看| 丁香桃色午夜亚洲一区二区三区| 国产成人在线视频免费播放| 视频一区视频二区在线观看| 老司机一区二区| 国产精品一区二区免费不卡 | 精品系列免费在线观看| 国产一区二区久久| 丰满少妇在线播放bd日韩电影| 国产91精品在线观看| 成人高清视频在线| 日本韩国欧美一区二区三区| 欧美亚洲综合久久| 欧美日韩在线观看一区二区 | 中文字幕不卡三区| 亚洲激情男女视频| 亚洲国产wwwccc36天堂| 奇米777欧美一区二区| 国产在线日韩欧美| 91影院在线免费观看| 欧美视频一区二区在线观看| 久久夜色精品国产噜噜av| 国产欧美一区二区精品秋霞影院 | 精品剧情v国产在线观看在线| 2020国产成人综合网| 日韩欧美在线网站| 亚洲国产精品激情在线观看 | 日本中文在线一区| 成人福利视频在线| 4438成人网| 国产精品视频观看| 亚洲成人综合视频| 国产成人精品影院| 欧美精选一区二区| 国产精品欧美精品| 日韩激情中文字幕| 国产美女精品在线| 欧美肥妇bbw| 最新高清无码专区| 久久成人免费网| 91免费国产在线观看| 日韩视频在线你懂得| 久久久99久久精品欧美| 亚洲在线观看免费| 高清日韩电视剧大全免费| 欧美狂野另类xxxxoooo| 国产欧美日韩另类一区| 亚洲欧美激情视频在线观看一区二区三区| 久久99久久精品| 精品视频全国免费看| 亚洲欧洲国产日韩| 国产精品亚洲专一区二区三区 | 色欧美88888久久久久久影院| 日韩欧美中文字幕一区| 亚洲女女做受ⅹxx高潮| 蜜臀av性久久久久蜜臀aⅴ四虎| 成人aa视频在线观看| www久久精品| 精彩视频一区二区| 欧美视频在线观看一区二区| 中文字幕一区二区三区色视频| 国内精品国产成人| 欧美一级二级三级乱码| 精品国产一区二区三区久久影院| 奇米综合一区二区三区精品视频| 色哟哟一区二区在线观看| 国产精品成人免费在线| 国产精品亚洲专一区二区三区| 日韩欧美一区在线观看| 一区二区三区在线观看欧美| 色老汉一区二区三区| 中文字幕一区二区在线观看| 国产成人8x视频一区二区| 日韩欧美的一区| 日韩电影在线免费看| 在线观看免费一区| 亚洲欧洲国产专区| 99久久久无码国产精品| 国产精品久久久久久亚洲伦| 国产激情一区二区三区四区 | 欧美日韩一区二区电影| 欧美日韩综合色| 亚洲人xxxx| 97久久精品人人澡人人爽| 欧美国产日韩亚洲一区| 精品一区二区三区蜜桃| 欧美高清www午色夜在线视频| 蜜桃视频一区二区| 欧美精品一区男女天堂| 99麻豆久久久国产精品免费优播| 日韩午夜激情免费电影| 久久免费看少妇高潮| 久久精品国产亚洲高清剧情介绍| 欧美在线视频日韩| 中文字幕中文字幕中文字幕亚洲无线| 麻豆国产精品一区二区三区| 欧美综合色免费| 视频一区二区国产| 欧美性欧美巨大黑白大战| 精品播放一区二区|