Esempio n. 1
0
 /**
  * add GGSN specific parsing methods.
  */
 protected function addParsingMethods()
 {
     $newParsingMethods = array('diagnostics' => function ($data) {
         $ret = false;
         $diags = $this->ggsnConfig['fields_translate']['diagnostics'];
         if (!is_array($data)) {
             $diag = intval(implode('.', unpack('C', $data)));
             $ret = isset($diags[$diag]) ? $diags[$diag] : false;
         } else {
             foreach ($diags as $key => $diagnostics) {
                 if (is_array($diagnostics) && isset($data[$key])) {
                     $diag = intval(implode('.', unpack('C', $data[$key])));
                     Billrun_Factory::log()->log($diag . " : " . $diagnostics[$diag], Zend_Log::DEBUG);
                     $ret = $diagnostics[$diag];
                 }
             }
         }
         return $ret;
     }, 'timezone' => function ($data) {
         $smode = unpack('c*', $data);
         //$timeSaving=intval( $smode[2] & 0x3 );
         //time zone offset is repesented by multiples of 15 minutes.
         $quarterOffset = Billrun_Util::bcd_decode($smode[1] & 0xf7);
         if (abs($quarterOffset) <= 52) {
             //data sanity check less then 13hours  offset
             $h = str_pad(abs(intval($quarterOffset / 4)), 2, "0", STR_PAD_LEFT);
             // calc the offset hours
             $m = str_pad(abs($quarterOffset % 4 * 15), 2, "0", STR_PAD_LEFT);
             // calc the offset minutes
             return (($smode[1] & 0x8) == 0 ? "+" : "-") . "{$h}:{$m}";
         }
         //Billrun_Factory::log()->log($data. " : ". print_r($smode,1),Zend_Log::DEBUG );
         return false;
     }, 'ch_ch_selection_mode' => function ($data) {
         $smode = intval(implode('.', unpack('C', $data)));
         return isset($this->ggsnConfig['fields_translate']['ch_ch_selection_mode'][$smode]) ? $this->ggsnConfig['fields_translate']['ch_ch_selection_mode'][$smode] : false;
     }, 'bcd_encode' => function ($fieldData) {
         $halfBytes = unpack('C*', $fieldData);
         $ret = '';
         foreach ($halfBytes as $byte) {
             $ret .= Billrun_Util::bcd_decode($byte);
         }
         return $ret;
     }, 'default' => function ($type, $data) {
         return is_array($data) ? '' : implode('', unpack($type, $data));
     });
     $this->parsingMethods = array_merge($this->parsingMethods, $newParsingMethods);
 }