/**
  * Waits for particular PDU (with known command id and sequence no) for some period of time ($to).
  * All unmatched PDUs go to $this->pdu_inc array
  * @access public
  * @param int $cmd Command id
  * @param int $sqn Sequence no
  * @param int $to Timeout (miliseconds)
  * @return mixed PDU on success, FALSE on error
  */
 public function pdu_wait_for($cmd, $sqn = null, $to = 60000)
 {
     if ($this->state != CSS_CONNECTED) {
         return false;
     }
     l('Will wait for ' . $this->translate_cmd($cmd) . ' with sqn no ' . $sqn);
     list($usec, $sec) = explode(' ', microtime());
     $now = $start = $sec + $usec;
     while ($now - $start < $to / 1000) {
         if (false !== ($pdu = $this->pdu_read())) {
             $hdr = $this->sunpack('Nlen/Ncmd/Nstat/Nsqn', substr($pdu, 0, 16));
             l('Got ' . $this->translate_cmd($hdr['cmd']) . ' (' . $hdr['cmd'] . ') with sqn no ' . $hdr['sqn']);
             if ($hdr['cmd'] == $cmd && ($hdr['sqn'] == $sqn || $sqn == null)) {
                 l('Thats it. Returned.');
                 return $pdu;
             } elseif ($hdr['cmd'] == 0x15) {
                 // Got ENQUIRELINK - replying
                 if (!$this->send(NIMF_esme::form_pdu(ENQUIRELINK | ACK, array('sqn' => $hdr['sqn'])))) {
                     l('Could not send ENQUIRELINK_ACK');
                 }
             } else {
                 $this->pdu_inc[] = $pdu;
             }
         } else {
             if ($this->state != CSS_CONNECTED) {
                 l('Disconnection happened.');
                 return false;
             }
         }
         list($usec, $sec) = explode(' ', microtime());
         $now = $sec + $usec;
     }
     l('PDU we were waiting for didn\'t arrive.');
     return false;
 }
Beispiel #2
0
         $db->put('SET NAMES "' . $conf['DB']['charset'] . '"');
         $db->autocommit(false);
     }
 }
 // checking for outgoing messages
 $db->commit();
 // <-- This is required to see non cached outbox result
 if (false === ($send = $db->get_array('SELECT * FROM outbox WHERE (src IN (' . $conf['SMPP']['nums'] . ') OR src LIKE \'77%\') AND try_ts<' . (time() - 3600) . ' ORDER BY id LIMIT ' . $conf['ESME']['txlimit']))) {
     l('Could not read from db', L_CRIT);
     unset($db);
     continue;
 }
 if (isset($send['id'])) {
     // check for SMPP connect
     if (!isset($esme)) {
         $esme = new NIMF_esme($conf['SMPP']['host'], $conf['SMPP']['port'], $conf['SMPP']['login'], $conf['SMPP']['pass']);
         $esme->dir = 'TX';
         $esme->address_range = $conf['SMPP']['addrange'];
         $esme->addr_ton = $conf['SMPP']['at'];
         $esme->addr_npi = $conf['SMPP']['an'];
         $esme->dbcoding = $conf['ESME']['dbcoding'];
         $esme->sbcoding = $conf['ESME']['sbcoding'];
         $esme->mbcoding = $conf['ESME']['mbcoding'];
     }
     if ($esme->state > ESS_CONNECTED && $esme->last_enquire < time() - $conf['ESME']['enquire']) {
         if (!$esme->enquirelink()) {
             $esme->sock->disconnect();
             $esme->state = ESS_DISCONNECTED;
         } else {
             $esme->last_enquire = time();
         }
Beispiel #3
0
 /**
  * Forms PDU.
  * @access public
  * @param int $cmd Command id
  * @param array $pars Parameters
  * @return string PDU
  */
 public function form_pdu($cmd, $pars = array())
 {
     $pdu = null;
     switch ($cmd) {
         case BIND_TX:
         case BIND_RX:
             $pdu = pack('a' . (strlen($this->login) + 1) . 'a' . (strlen($this->pass) + 1) . 'a' . (strlen($this->system_type) + 1) . 'CCCa' . (strlen($this->address_range) + 1), $this->login, $this->pass, $this->system_type, 0x34, $this->addr_ton, $this->addr_npi, $this->address_range);
             $this->sqn++;
             break;
         case SUBMIT_SM:
             $pdu = pack('a' . (strlen($pars['stype']) + 1) . 'CCa' . (strlen($pars['src']) + 1) . 'CCa' . (strlen($pars['dst']) + 1) . 'CCCa' . (strlen($pars['sdt']) + 1) . 'a' . (strlen($pars['valid']) + 1) . 'CCCCC', $pars['stype'], $pars['st'], $pars['sn'], $pars['src'], $pars['dt'], $pars['dn'], $pars['dst'], $pars['esm'], $pars['proto'], $pars['prior'], $pars['sdt'], $pars['valid'], $pars['deliv'], $pars['repl'], $pars['dc'], $pars['msgid'], strlen($pars['text'])) . $pars['text'];
             break;
         case ENQUIRELINK:
         case UNBIND:
             $this->sqn++;
             break;
         case DELIVER_SM | ACK:
             $pdu = pack('a2', '0');
             break;
     }
     if (isset($pars['sqn'])) {
         $sqn = $pars['sqn'];
     } else {
         $sqn = $this->sqn;
     }
     return NIMF_esme::form_pdu_header($cmd, strlen($pdu), $sqn) . $pdu;
 }
Beispiel #4
0
     $db = new NIMF_mysqli($conf['DB']['host'], $conf['DB']['login'], $conf['DB']['pass'], $conf['DB']['db']);
     if (mysqli_connect_errno()) {
         l('Could not connect to DB: ' . mysqli_connect_error(), L_EMRG);
         unset($db);
         sleep(5);
         continue;
     } else {
         l('Connected to DB successfully: ' . $db->host_info);
         $db->put('SET NAMES "' . $conf['DB']['charset'] . '"');
         $db->put('SET SESSION query_cache_type = OFF');
         $db->autocommit(false);
     }
 }
 // check for SMPP connect
 if (!isset($esme)) {
     $esme = new NIMF_esme($conf['SMPP']['host'], $conf['SMPP']['port'], $conf['SMPP']['login'], $conf['SMPP']['pass']);
     $esme->dir = 'RX';
     $esme->address_range = $conf['SMPP']['addrange'];
     $esme->addr_ton = $conf['SMPP']['at'];
     $esme->addr_npi = $conf['SMPP']['an'];
     $esme->dbcoding = $conf['ESME']['dbcoding'];
     $esme->sbcoding = $conf['ESME']['sbcoding'];
     $esme->mbcoding = $conf['ESME']['mbcoding'];
 }
 if ($esme->state > ESS_CONNECTED && $esme->last_enquire < time() - $conf['ESME']['enquire']) {
     if (!$esme->enquirelink()) {
         $esme->sock->disconnect();
         $esme->state = ESS_DISCONNECTED;
     } else {
         $esme->last_enquire = time();
     }