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

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

?? gsm_sms_store.c

?? Gsm手機(短信息,電話簿)開發庫C++源代碼
?? C
字號:
// *************************************************************************
// * GSM TA/ME library
// *
// * File:    gsm_sms_store.cc
// *
// * Purpose: SMS functions, SMS store
// *          (ETSI GSM 07.05)
// *
// * Author:  Peter Hofmann (software@pxh.de)
// *
// * Created: 20.5.1999
// *************************************************************************

#ifdef HAVE_CONFIG_H
#include <gsm_config.h>
#endif
#include <gsmlib/gsm_sms_store.h>
#include <gsmlib/gsm_parser.h>
#include <gsmlib/gsm_me_ta.h>
#include <iostream>

using namespace std;
using namespace gsmlib;

// SMSStoreEntry members

SMSStoreEntry::SMSStoreEntry() :
   _status(Unknown), _cached(false), _mySMSStore(NULL), _index(0)
{
}


SMSMessageRef SMSStoreEntry::message() const throw(GsmException)
{
  if (! cached())
  {
    assert(_mySMSStore != NULL);
    // these operations are at least "logically const"
    SMSStoreEntry *thisEntry = const_cast<SMSStoreEntry*>(this);
    _mySMSStore->readEntry(_index, thisEntry->_message, thisEntry->_status);
    thisEntry->_cached = true;
  }
  return _message;
}

CBMessageRef SMSStoreEntry::cbMessage() const throw(GsmException)
{
  assert(_mySMSStore != NULL);

  // these operations are at least "logically const"
  SMSStoreEntry *thisEntry = const_cast<SMSStoreEntry*>(this);
  // don't cache CB message for now
  thisEntry->_cached = false;

  CBMessageRef result;
  _mySMSStore->readEntry(_index, result);
  return result;
}

SMSStoreEntry::SMSMemoryStatus SMSStoreEntry::status() const
  throw(GsmException)
{
  if (! cached())
  {
    assert(_mySMSStore != NULL);
    // these operations are at least "logically const"
    SMSStoreEntry *thisEntry = const_cast<SMSStoreEntry*>(this);
    _mySMSStore->readEntry(_index, thisEntry->_message, thisEntry->_status);
    thisEntry->_cached = true;
  }
  return _status;
}

bool SMSStoreEntry::empty() const throw(GsmException)
{
  return message().isnull();
}

unsigned char SMSStoreEntry::send(Ref<SMSMessage> &ackPdu)
  throw(GsmException)
{
  return _mySMSStore->send(_index, ackPdu);
}

unsigned char SMSStoreEntry::send() throw(GsmException)
{
  SMSMessageRef mref;
  return send(mref);
}

bool SMSStoreEntry::cached() const
{
  if (_mySMSStore == NULL)
    return _cached;
  else
    return _cached && _mySMSStore->_useCache;
}

Ref<SMSStoreEntry> SMSStoreEntry::clone()
{
  Ref<SMSStoreEntry> result = new SMSStoreEntry(_message->clone());
  result->_status = _status;
  result->_index = _index;
  return result;
}

bool SMSStoreEntry::operator==(const SMSStoreEntry &e) const
{
  if (_message.isnull() || e._message.isnull())
    return _message.isnull() && e._message.isnull();
  else
    return _message->encode() == e._message->encode();
}

SMSStoreEntry::SMSStoreEntry(const SMSStoreEntry &e)
{
 _message = e._message;
 _status = e._status;
 _cached = e._cached;
 _mySMSStore = e._mySMSStore;
 _index = e._index;
}

SMSStoreEntry &SMSStoreEntry::operator=(const SMSStoreEntry &e)
{
 _message = e._message;
 _status = e._status;
 _cached = e._cached;
 _mySMSStore = e._mySMSStore;
 _index = e._index;
 return *this;
}

// iterator members

SMSStoreEntry &SMSStoreIterator::operator*()
{
  return (*_store)[_index];
}
  
SMSStoreEntry *SMSStoreIterator::operator->()
{
  return &(*_store)[_index];
}

SMSStoreIterator::operator SMSStoreEntry*()
{
  return &(*_store)[_index];
}

SMSStoreIterator &SMSStoreIterator::operator=(const SMSStoreIterator &i)
{
  _index = i._index;
  _store = i._store;
  return *this;
}

const SMSStoreEntry &SMSStoreConstIterator::operator*()
{
  return (*_store)[_index];
}
  
const SMSStoreEntry *SMSStoreConstIterator::operator->()
{
  return &(*_store)[_index];
}

// SMSStore members

void SMSStore::readEntry(int index, SMSMessageRef &message,
                         SMSStoreEntry::SMSMemoryStatus &status)
  throw(GsmException)
{
  // select SMS store
  _meTa.setSMSStore(_storeName, 1);

#ifndef NDEBUG
  if (debugLevel() >= 1)
    cerr << "*** Reading SMS entry " << index << endl;
#endif // NDEBUG

  string pdu;
  Ref<Parser> p;
  try
  {
    p = new Parser(_at->chat("+CMGR=" + intToStr(index + 1), "+CMGR:",
                             pdu, false, true, true));
  }
  catch (GsmException &ge)
  {
    if (ge.getErrorCode() != SMS_INVALID_MEMORY_INDEX)
      throw ge;
    else
    {
      message = SMSMessageRef();
      status = SMSStoreEntry::Unknown;
      return;
    }
  }

  if (pdu.length() == 0)
  {
    message = SMSMessageRef();
    status = SMSStoreEntry::Unknown;
  }
  else
  {
    // add missing service centre address if required by ME
    if (! _at->getMeTa().getCapabilities()._hasSMSSCAprefix)
      pdu = "00" + pdu;

    status = (SMSStoreEntry::SMSMemoryStatus)p->parseInt();

    // ignore the rest of the line
    message = SMSMessageRef(
      SMSMessage::decode(pdu,
                         !(status == SMSStoreEntry::StoredUnsent ||
                           status == SMSStoreEntry::StoredSent),
                         _at.getptr()));
  }
}

void SMSStore::readEntry(int index, CBMessageRef &message)
  throw(GsmException)
{
  // select SMS store
  _meTa.setSMSStore(_storeName, 1);

#ifndef NDEBUG
  if (debugLevel() >= 1)
    cerr << "*** Reading CB entry " << index << endl;
#endif // NDEBUG

  string pdu;
  Ref<Parser> p;
  try
  {
    p = new Parser(_at->chat("+CMGR=" + intToStr(index + 1), "+CMGR:",
                             pdu, false, true, true));
  }
  catch (GsmException &ge)
  {
    if (ge.getErrorCode() != SMS_INVALID_MEMORY_INDEX)
      throw ge;
    else
    {
      message = CBMessageRef();
      return;
    }
  }

  if (pdu.length() == 0)
    message = CBMessageRef();
  else
    message = CBMessageRef(new CBMessage(pdu));
}

void SMSStore::writeEntry(int &index, SMSMessageRef message)
  throw(GsmException)
{
  // select SMS store
  _meTa.setSMSStore(_storeName, 2);

#ifndef NDEBUG
  if (debugLevel() >= 1)
    cerr << "*** Writing SMS entry " << index << endl;
#endif
  
  // compute length of pdu
  string pdu = message->encode();

  // set message status to "RECEIVED READ" for SMS_DELIVER, SMS_STATUS_REPORT
  string statusString;
  if (message->messageType() != SMSMessage::SMS_SUBMIT)
    statusString = ",1";

  Parser p(_at->sendPdu("+CMGW=" +
                        intToStr(pdu.length() / 2 -
                                 message->getSCAddressLen()) + statusString,
                        "+CMGW:", pdu));
  index = p.parseInt() - 1;
}

void SMSStore::eraseEntry(int index) throw(GsmException)
{
  // Select SMS store
  _meTa.setSMSStore(_storeName, 1);

#ifndef NDEBUG
  if (debugLevel() >= 1)
    cerr << "*** Erasing SMS entry " << index << endl;
#endif
  
  _at->chat("+CMGD=" + intToStr(index + 1));
}

unsigned char SMSStore::send(int index, Ref<SMSMessage> &ackPdu)
 throw(GsmException)
{
  Parser p(_at->chat("+CMSS=" + intToStr(index + 1), "+CMSS:"));
  unsigned char messageReference = p.parseInt();

  if (p.parseComma(true))
  {
    string pdu = p.parseEol();

    // add missing service centre address if required by ME
    if (! _at->getMeTa().getCapabilities()._hasSMSSCAprefix)
      pdu = "00" + pdu;

    ackPdu = SMSMessage::decode(pdu);
  }
  else
    ackPdu = SMSMessageRef();

  return messageReference;
}

int SMSStore::doInsert(SMSMessageRef message)
  throw(GsmException)
{
  int index;
  writeEntry(index, message);
  // it is safer to force reading back the SMS from the ME
  resizeStore(index + 1);
  _store[index]->_cached = false;
  return index;
}

SMSStore::SMSStore(string storeName, Ref<GsmAt> at, MeTa &meTa)
  throw(GsmException) :
  _storeName(storeName), _at(at), _meTa(meTa), _useCache(true)
{
  // select SMS store
  Parser p(_meTa.setSMSStore(_storeName, true));
  
  p.parseInt();                 // skip number of used mems
  p.parseComma();

  resizeStore(p.parseInt());    // ignore rest of line
}

void SMSStore::resizeStore(int newSize)
{
  int oldSize = _store.size();
  if (newSize > oldSize)
  {
    //    cout << "*** Resizing from " << oldSize << " to " << newSize << endl;
    _store.resize(newSize);
    
    // initialize store entries
    for (int i = oldSize; i < newSize; i++)
    {
      _store[i] = new SMSStoreEntry();
      _store[i]->_index = i;
      _store[i]->_cached = false;
      _store[i]->_mySMSStore = this;
    }
  }
  _capacity = newSize;
}

SMSStore::iterator SMSStore::begin()
{
  return SMSStoreIterator(0, this);
}

SMSStore::const_iterator SMSStore::begin() const
{
  return SMSStoreConstIterator(0, this);
}

SMSStore::iterator SMSStore::end()
{
  return SMSStoreIterator(_capacity, this);
}

SMSStore::const_iterator SMSStore::end() const
{
  return SMSStoreConstIterator(_capacity, this);
}

SMSStore::reference SMSStore::operator[](int n)
{
  resizeStore(n + 1);
  return *_store[n];
}

SMSStore::const_reference SMSStore::operator[](int n) const
{
  const_cast<SMSStore*>(this)->resizeStore(n + 1);
  return *_store[n];
}

SMSStore::reference SMSStore::front()
{
  return *_store[0];
}

SMSStore::const_reference SMSStore::front() const
{
  return *_store[0];
}

SMSStore::reference SMSStore::back()
{
  return *_store.back();
}

SMSStore::const_reference SMSStore::back() const
{
  return *_store.back();
}

int SMSStore::size() const throw(GsmException)
{
  // select SMS store
  Parser p(_meTa.setSMSStore(_storeName, 1, true));
  
  return p.parseInt();  
}

SMSStore::iterator SMSStore::insert(iterator position,
                                    const SMSStoreEntry& x)
  throw(GsmException)
{
  int index = doInsert(x.message());
  return SMSStoreIterator(index, this);
}

SMSStore::iterator SMSStore::insert(const SMSStoreEntry& x)
  throw(GsmException)
{
  int index = doInsert(x.message());
  return SMSStoreIterator(index, this);
}

void SMSStore::insert (iterator pos, int n, const SMSStoreEntry& x)
  throw(GsmException)
{
  for (int i = 0; i < n; i++)
    doInsert(x.message());
}

void SMSStore::insert (iterator pos, long n, const SMSStoreEntry& x)
  throw(GsmException)
{
  for (long i = 0; i < n; i++)
    doInsert(x.message());
}

SMSStore::iterator SMSStore::erase(iterator position)
  throw(GsmException)
{
  eraseEntry(position->_index);
  position->_cached = false;
  return position + 1;
}

SMSStore::iterator SMSStore::erase(iterator first, iterator last)
  throw(GsmException)
{
  iterator i(0, this);
  for (i = first; i != last; ++i)
    erase(i);
  return i;
}

void SMSStore::clear() throw(GsmException)
{
  for (iterator i = begin(); i != end(); ++i)
    erase(i);
}

SMSStore::~SMSStore()
{
  for (vector<SMSStoreEntry*>::iterator i = _store.begin();
       i != _store.end(); ++i)
    delete *i;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品69毛片高清亚洲| 一区二区三区免费网站| 在线观看中文字幕不卡| 麻豆国产一区二区| 亚洲一二三区视频在线观看| 久久品道一品道久久精品| 欧美日韩美少妇| 99国产精品一区| 国产乱码精品一区二区三区av| 香蕉久久夜色精品国产使用方法| 中文字幕在线不卡视频| 久久免费的精品国产v∧| 欧美精品三级在线观看| 91免费看片在线观看| 国产91丝袜在线播放九色| 麻豆精品一区二区av白丝在线| 亚洲乱码日产精品bd| 国产欧美精品在线观看| 久久久久久亚洲综合| 在线成人免费观看| 欧美在线一二三四区| 91在线云播放| 成人黄色在线网站| 国产麻豆成人精品| 国内精品久久久久影院色| 免播放器亚洲一区| 偷窥少妇高潮呻吟av久久免费| 亚洲欧美一区二区三区国产精品 | 国产精品视频一二三区| 日韩你懂的在线播放| 91精品国产综合久久蜜臀| 91福利国产成人精品照片| 91在线免费视频观看| 91捆绑美女网站| 一本一道综合狠狠老| 99热在这里有精品免费| 91麻豆福利精品推荐| 色系网站成人免费| 色伊人久久综合中文字幕| 欧美在线影院一区二区| 欧美精品久久99久久在免费线| 欧美三级视频在线观看| 欧美日韩二区三区| 制服丝袜中文字幕一区| 欧美r级电影在线观看| 精品国产一区二区在线观看| 精品福利av导航| 国产亚洲一本大道中文在线| 欧美国产精品一区二区| 国产精品久久久久久久裸模| 自拍偷拍亚洲综合| 伊人色综合久久天天人手人婷| 亚洲超丰满肉感bbw| 全国精品久久少妇| 久久精品免费观看| 丰满少妇久久久久久久| 色综合天天综合网天天看片 | 欧美高清在线精品一区| 亚洲欧洲精品一区二区三区| 亚洲小说春色综合另类电影| 香蕉久久夜色精品国产使用方法| 久久成人免费电影| 成人国产精品免费| 欧美日韩你懂得| 精品少妇一区二区三区在线视频| 亚洲国产激情av| 一区二区三区av电影| 秋霞午夜鲁丝一区二区老狼| 国产高清一区日本| 欧美亚洲高清一区| 精品国产乱码久久久久久1区2区| 一区二区中文字幕在线| 日韩精品亚洲一区二区三区免费| 国产酒店精品激情| 色天使久久综合网天天| 日韩欧美亚洲另类制服综合在线| 国产农村妇女毛片精品久久麻豆 | 国产日韩欧美精品在线| 亚洲卡通动漫在线| 老司机午夜精品| 91视频一区二区| 欧美一级欧美三级在线观看 | 国产色爱av资源综合区| 亚洲女同ⅹxx女同tv| 日本亚洲一区二区| 国产91丝袜在线观看| 欧美日韩一区在线| 国产情人综合久久777777| 亚洲国产wwwccc36天堂| 国产高清视频一区| 欧美卡1卡2卡| 一区视频在线播放| 狠狠v欧美v日韩v亚洲ⅴ| 欧美最猛黑人xxxxx猛交| 国产午夜精品在线观看| 日韩av电影天堂| 色综合久久久网| 国产欧美日韩精品一区| 看电视剧不卡顿的网站| 欧美日韩国产三级| 亚洲三级理论片| 国产精品自拍一区| 91精品免费在线| 亚洲精品va在线观看| 成人网男人的天堂| 久久久影视传媒| 奇米777欧美一区二区| 欧美在线看片a免费观看| 日韩一区欧美小说| 国产成人精品综合在线观看| 日韩视频免费观看高清完整版在线观看| 亚洲欧洲色图综合| 成人午夜短视频| 国产欧美精品一区二区色综合朱莉 | 91国偷自产一区二区三区观看| 国产午夜精品理论片a级大结局 | 亚洲一本大道在线| 99精品视频一区二区| 欧美韩日一区二区三区| 伊人婷婷欧美激情| 一区二区三区成人| 国产一区二区伦理| 777亚洲妇女| 亚洲国产日韩综合久久精品| 99久久精品一区| 日韩一区日韩二区| 不卡影院免费观看| 国产精品你懂的| 99综合电影在线视频| 中文字幕不卡在线| 成人avav在线| 中文字幕精品三区| 成人少妇影院yyyy| 中文天堂在线一区| 成人18视频在线播放| 中文字幕在线不卡一区| 99视频有精品| 亚洲美女偷拍久久| 欧美午夜电影在线播放| 亚洲一区二区在线视频| 欧美色图天堂网| 视频一区二区欧美| 欧美va日韩va| 欧美美女直播网站| 日韩精品一级中文字幕精品视频免费观看| 欧美顶级少妇做爰| 激情久久五月天| 国产人成一区二区三区影院| 不卡的av在线播放| 亚洲美腿欧美偷拍| 欧美欧美欧美欧美首页| 看电视剧不卡顿的网站| 国产欧美一区在线| 不卡视频在线看| 一区二区日韩电影| 欧美丰满美乳xxx高潮www| 蜜乳av一区二区三区| 国产午夜精品一区二区| 一本久道久久综合中文字幕| 亚洲第一福利一区| 久久综合久久鬼色| av一区二区三区黑人| 婷婷丁香久久五月婷婷| 久久色.com| 91福利视频久久久久| 日本不卡的三区四区五区| 日本一区二区三区免费乱视频| aaa国产一区| 亚洲bt欧美bt精品| 久久麻豆一区二区| 欧美性受xxxx黑人xyx性爽| 另类人妖一区二区av| 日韩美女久久久| 日韩欧美123| 色播五月激情综合网| 狠狠狠色丁香婷婷综合久久五月| 中文字幕在线不卡| 3d成人h动漫网站入口| 成人免费电影视频| 五月天中文字幕一区二区| 国产女同互慰高潮91漫画| 在线不卡免费av| www.欧美亚洲| 另类综合日韩欧美亚洲| 亚洲免费在线电影| 久久综合九色综合欧美就去吻| 91激情五月电影| 国产高清精品在线| 日本在线不卡一区| 亚洲精品国产第一综合99久久 | 粉嫩av一区二区三区在线播放| 亚洲综合色成人| 国产视频视频一区| 日韩三级免费观看| 欧美亚洲图片小说| 97aⅴ精品视频一二三区| 国产精品一二三四五| 日韩二区在线观看| 亚洲精品日韩一| 国产精品毛片久久久久久久|