コード例 #1
0
    def recv_once(self):
        frame = self.socket_client.recv()
        ID = frame.ID
        log(title='CMPP2_RECEIVE_FRAME_%s_%s_%s' %
            (self.config.cmpp_sp_id.encode(), self.config.cmpp_src_id.encode(),
             Cmpp2FrameHandler.ID_TO_NAME[frame.ID]),
            content=frame.ID == 0x00000005
            and [frame.__dict__, frame.status_report.__dict__]
            or frame.__dict__,
            logger='sms',
            level='debug')

        if ID == CMPP2_TERMINATE.ID:
            terminate = frame
            terminate_resp = CMPP2_TERMINATE_RESP()
            self.send_queue_put(terminate_resp, terminate)
        elif ID == CMPP2_DELIVER.ID:
            deliver = frame
            deliver_resp = self.recv_sms(frame)
            self.send_queue_put(deliver_resp, deliver)
        elif ID == CMPP2_ACTIVE_TEST:
            active_test = frame
            active_test_resp = CMPP2_ACTIVE_TEST_RESP()
            active_test_resp.reserve = 0
            self.send_queue_put(active_test_resp, active_test)

        elif ID == CMPP2_TERMINATE_RESP.ID:
            self.socket_client.close()
            raise Cmpp2TerminateException('TERMINATE')
        elif ID == CMPP2_SUBMIT_RESP.ID:
            cmpp_submit_resp = CMPP2_SUBMIT_RESP
            cmpp_submit_resp = frame
            sequence_Id = cmpp_submit_resp.sequence_Id
            msg = self.commit_resp_wait_list_get(sequence_Id)
            if msg:
                if cmpp_submit_resp.result == 8:
                    self.commit_queue.put(
                        (msg.get('sms_obj'), False))  # True 一次重发
                else:
                    msg['msg_id'] = cmpp_submit_resp.msg_id
                    msg['result'] = cmpp_submit_resp.result
                    self.handler.sms_ack(self, msg)
            else:
                log(title='CMPP2_SUBMIT_RESP_MATCH_NO_SEQID_%s_%s' %
                    (self.config.cmpp_sp_id.encode(),
                     self.config.cmpp_src_id.encode()),
                    content=frame.ID == 0x00000005
                    and [frame.__dict__, frame.status_report.__dict__]
                    or frame.__dict__,
                    logger='sms',
                    level='debug')

        elif ID in (CMPP2_CONNECT.ID, CMPP2_CONNECT_RESP.ID, CMPP2_SUBMIT.ID,
                    CMPP2_DELIVER_RESP.ID, CMPP2_QUERY.ID, CMPP2_QUERY_RESP.ID,
                    CMPP2_CANCEL.ID, CMPP2_CANCEL_RESP.ID,
                    CMPP2_ACTIVE_TEST_RESP.ID):
            pass
        else:
            raise Cmpp2UnknownCommandIDException("bad id = 0x%08x" % ID)
        return frame
コード例 #2
0
 def decorator(*args, **kwargs):
     try:
         return function(*args, **kwargs)
     except:
         log(title='SMS_EXCEPTION',
             content=[function, args, kwargs],
             logger='sms',
             level='error')
コード例 #3
0
ファイル: task.py プロジェクト: wjchao9111/X
 def exec_func(self, func, *args, **kwargs):
     try:
         return func(*args, **kwargs)
     except:
         log(title='WORKER_EXCEPTION',
             content=[func, args, kwargs],
             logger='sms',
             level='error')
     return func(*args, **kwargs)
コード例 #4
0
ファイル: exception.py プロジェクト: wjchao9111/X
 def decorator(*args, **kwargs):
     try:
         return function(*args, **kwargs)
     except:
         log(
             title='SMS_EXCEPTION',
             content=[function, args, kwargs],
             logger='sms',
             level='error'
         )
コード例 #5
0
ファイル: task.py プロジェクト: wjchao9111/X
 def exec_func(self, func, *args, **kwargs):
     try:
         return func(*args, **kwargs)
     except:
         log(
             title='WORKER_EXCEPTION',
             content=[func, args, kwargs],
             logger='sms',
             level='error'
         )
     return func(*args, **kwargs)
コード例 #6
0
ファイル: cmpp2client.py プロジェクト: wjchao9111/X
 def commit_resp_wait_list_put(self, seq_id, msg):
     try:
         self.commit_resp_wait_list[seq_id] = msg
     except Exception, _e:
         log(
             title='CMPP2_COMMIT_RESP_WAIT_LIST_PUT_ERROR_%s_%s' % (
                 self.config.cmpp_sp_id.encode(), self.config.cmpp_src_id.encode()),
             content={'msg': [seq_id, msg], 'wait_list': self.commit_resp_wait_list},
             logger='sms',
             level='error'
         )
コード例 #7
0
ファイル: __init__.py プロジェクト: wjchao9111/X
    def load_cls(path):
        try:
            if path not in Factory.class_dict:
                Factory.class_dict[path] = load_cls(path)

            return Factory.class_dict[path]
        except:
            log(title='LOAD_CLS_EXCEPTION_%s' % path,
                content=None,
                logger='sms',
                level='error')
            return None
コード例 #8
0
ファイル: cmpp2client.py プロジェクト: wjchao9111/X
 def commit_resp_wait_list_get(self, seq_id, raise_error=True):
     try:
         return self.commit_resp_wait_list.pop(seq_id)
     except Exception, _e:
         if raise_error:
             log(
                 title='CMPP2_COMMIT_RESP_WAIT_LIST_GET_ERROR_%s_%s' % (
                     self.config.cmpp_sp_id.encode(), self.config.cmpp_src_id.encode()),
                 content={'msg': [seq_id], 'wait_list': self.commit_resp_wait_list},
                 logger='sms',
                 level='error'
             )
コード例 #9
0
 def start_serv(self):
     while self.reconnect:
         self.reset_environment()
         self.auto_connect()
         self.start_send_daemon()
         self.recv_daemon()
         log(title='CMPP2_SERV_CONTINUE_%s_%s_RECONNECT=%s' %
             (self.config.cmpp_sp_id.encode(),
              self.config.cmpp_src_id.encode(), self.reconnect),
             content=None,
             logger='sms',
             level='error')
コード例 #10
0
ファイル: cmpp2client.py プロジェクト: wjchao9111/X
 def start_serv(self):
     while self.reconnect:
         self.reset_environment()
         self.auto_connect()
         self.start_send_daemon()
         self.recv_daemon()
         log(
             title='CMPP2_SERV_CONTINUE_%s_%s_RECONNECT=%s' % (
                 self.config.cmpp_sp_id.encode(), self.config.cmpp_src_id.encode(), self.reconnect),
             content=None,
             logger='sms',
             level='error'
         )
コード例 #11
0
 def commit_resp_wait_list_put(self, seq_id, msg):
     try:
         self.commit_resp_wait_list[seq_id] = msg
     except Exception, _e:
         log(title='CMPP2_COMMIT_RESP_WAIT_LIST_PUT_ERROR_%s_%s' %
             (self.config.cmpp_sp_id.encode(),
              self.config.cmpp_src_id.encode()),
             content={
                 'msg': [seq_id, msg],
                 'wait_list': self.commit_resp_wait_list
             },
             logger='sms',
             level='error')
コード例 #12
0
 def stop_serv(self, sleep_time=1.0):
     self.reconnect = False
     self.cmpp_terminate()
     sleep(sleep_time / 5)
     sleep(sleep_time / 5)
     sleep(sleep_time / 5)
     sleep(sleep_time / 5)
     sleep(sleep_time / 5)
     self.socket_client.close()
     log(title='CMPP2_STOP_SERV_%s_%s' % (self.config.cmpp_sp_id.encode(),
                                          self.config.cmpp_src_id.encode()),
         content=None,
         logger='sms',
         level='error')
コード例 #13
0
ファイル: __init__.py プロジェクト: wjchao9111/X
    def load_cls(path):
        try:
            if path not in Factory.class_dict:
                Factory.class_dict[path] = load_cls(path)

            return Factory.class_dict[path]
        except:
            log(
                title='LOAD_CLS_EXCEPTION_%s' % path,
                content=None,
                logger='sms',
                level='error'
            )
            return None
コード例 #14
0
    def run(self):
        django_setup()
        import sms.serv.smstools
        task_loader = sms.serv.smstools.CommonSendTaskLoader()
        while True:
            try:
                self.cust_check()
                task_loader.fetch_new_task()

            except:
                log("SMS_MANAGER_ERROR", logger='sms', level='error')
                # traceback.print_exc()
                pass
            sleep(1)
コード例 #15
0
 def commit_resp_wait_list_get(self, seq_id, raise_error=True):
     try:
         return self.commit_resp_wait_list.pop(seq_id)
     except Exception, _e:
         if raise_error:
             log(title='CMPP2_COMMIT_RESP_WAIT_LIST_GET_ERROR_%s_%s' %
                 (self.config.cmpp_sp_id.encode(),
                  self.config.cmpp_src_id.encode()),
                 content={
                     'msg': [seq_id],
                     'wait_list': self.commit_resp_wait_list
                 },
                 logger='sms',
                 level='error')
コード例 #16
0
 def send_once(self):
     if self.send_queue.qsize() <= 0:
         self.submit_one_sms()
     if self.send_queue.qsize() <= 0:
         self.cmpp_active_test()
         return None
     frame = self.send_queue.get()
     log(title='CMPP2_SEND_FRAME_%s_%s_%s' %
         (self.config.cmpp_sp_id.encode(), self.config.cmpp_src_id.encode(),
          Cmpp2FrameHandler.ID_TO_NAME[frame.ID]),
         content=frame.__dict__,
         logger='sms',
         level='debug')
     self.socket_client.send(frame)
     return frame
コード例 #17
0
ファイル: cmpp2client.py プロジェクト: wjchao9111/X
 def stop_serv(self, sleep_time=1.0):
     self.reconnect = False
     self.cmpp_terminate()
     sleep(sleep_time / 5)
     sleep(sleep_time / 5)
     sleep(sleep_time / 5)
     sleep(sleep_time / 5)
     sleep(sleep_time / 5)
     self.socket_client.close()
     log(
         title='CMPP2_STOP_SERV_%s_%s' % (self.config.cmpp_sp_id.encode(), self.config.cmpp_src_id.encode()),
         content=None,
         logger='sms',
         level='error'
     )
コード例 #18
0
 def auto_connect(self):
     status = -1
     while self.reconnect and status != 0:
         try:
             self.socket_client.connect()
             status = self.cmpp_connect()
         except:
             log(title='CMPP2_AUTO_CONNECT_%s_%s' %
                 (self.config.cmpp_sp_id.encode(),
                  self.config.cmpp_src_id.encode()),
                 content=None,
                 logger='sms',
                 level='error')
         sleep(self.reconnect_interval)
     self.cmpp_status = status
     return status
コード例 #19
0
 def recv_daemon(self):
     try:
         while True:
             self.recv_once()
     except:
         # import traceback
         # traceback.print_exc()
         pass
     finally:
         self.socket_client.close()
         log(title='CMPP2_SOCK_RECV_STOP_%s_%s' %
             (self.config.cmpp_sp_id.encode(),
              self.config.cmpp_src_id.encode()),
             content=None,
             logger='sms',
             level='error')
コード例 #20
0
ファイル: cmpp2client.py プロジェクト: wjchao9111/X
 def send_once(self):
     if self.send_queue.qsize() <= 0:
         self.submit_one_sms()
     if self.send_queue.qsize() <= 0:
         self.cmpp_active_test()
         return None
     frame = self.send_queue.get()
     log(
         title='CMPP2_SEND_FRAME_%s_%s_%s' % (
             self.config.cmpp_sp_id.encode(), self.config.cmpp_src_id.encode(),
             Cmpp2FrameHandler.ID_TO_NAME[frame.ID]),
         content=frame.__dict__,
         logger='sms',
         level='debug'
     )
     self.socket_client.send(frame)
     return frame
コード例 #21
0
ファイル: cmpp2client.py プロジェクト: wjchao9111/X
 def recv_daemon(self):
     try:
         while True:
             self.recv_once()
     except:
         # import traceback
         # traceback.print_exc()
         pass
     finally:
         self.socket_client.close()
         log(
             title='CMPP2_SOCK_RECV_STOP_%s_%s' % (
                 self.config.cmpp_sp_id.encode(), self.config.cmpp_src_id.encode()),
             content=None,
             logger='sms',
             level='error'
         )
コード例 #22
0
ファイル: cmpp2client.py プロジェクト: wjchao9111/X
 def auto_connect(self):
     status = -1
     while self.reconnect and status != 0:
         try:
             self.socket_client.connect()
             status = self.cmpp_connect()
         except:
             log(
                 title='CMPP2_AUTO_CONNECT_%s_%s' % (
                     self.config.cmpp_sp_id.encode(), self.config.cmpp_src_id.encode()),
                 content=None,
                 logger='sms',
                 level='error'
             )
         sleep(self.reconnect_interval)
     self.cmpp_status = status
     return status
コード例 #23
0
 def send_daemon(self):
     sock = self.socket_client.sock
     try:
         while True:
             if sock != self.socket_client.sock:
                 break
             if self.cmpp_status not in (0, 0.5):
                 break
             self.send_once()
     except:
         self.socket_client.close()
     finally:
         log(title='CMPP2_SOCK_SEND_STOP_%s_%s' %
             (self.config.cmpp_sp_id.encode(),
              self.config.cmpp_src_id.encode()),
             content=None,
             logger='sms',
             level='error')
コード例 #24
0
ファイル: cmpp2client.py プロジェクト: wjchao9111/X
 def send_daemon(self):
     sock = self.socket_client.sock
     try:
         while True:
             if sock != self.socket_client.sock:
                 break
             if self.cmpp_status not in (0, 0.5):
                 break
             self.send_once()
     except:
         self.socket_client.close()
     finally:
         log(
             title='CMPP2_SOCK_SEND_STOP_%s_%s' % (
                 self.config.cmpp_sp_id.encode(), self.config.cmpp_src_id.encode()),
             content=None,
             logger='sms',
             level='error'
         )
コード例 #25
0
 def sms_decode(self, fmt, data):
     try:
         if fmt == 0:  # ascii
             return data.decode('ascii')
         elif fmt == 1:  # writecard
             return ''.join([len(hex(ord(c))) == 3 and '0' + hex(ord(c))[2:] or hex(ord(c))[2:] for c in data])
         elif fmt == 4:  # bin
             return ''.join([len(hex(ord(c))) == 3 and '0' + hex(ord(c))[2:] or hex(ord(c))[2:] for c in data])
         elif fmt == 8:
             return data.decode('UTF-16BE')
         elif fmt == 15:
             return data.decode('gbk')
         return data
     except:
         log(
             title='CMPP2_SMS_DECODE_%s_%s' % (fmt, base64.b64encode(data)),
             content=None,
             logger='sms',
             level='error'
         )
         return ''
コード例 #26
0
ファイル: tasks.py プロジェクト: wjchao9111/X
def send_task_prepare(task_id):
    task = SendTask.objects.get(id=task_id)
    success = False
    try:
        with transaction.atomic():
            loader = TaskLoader(task)
            msg_count = loader.sms_size
            id_list = []
            log('SEND_TASK_PREPARE', 'ID:%s,MSG_COUNT_ALL:%s' % (task.id, msg_count), 'celery', 'debug')
            count_1 = 0
            while True:
                msg_list = loader.fetch_msg(100)
                if msg_list:
                    MsgSend.objects.bulk_create(msg_list)
                else:
                    break
                count_1 += len(msg_list)
                log('SEND_TASK_PREPARE', 'ID:%s,MSG_COUNT_DONE:%s' % (task.id, count_1), 'celery', 'debug')

            task.stat = 'pre.end'
            task.count = msg_count
            task.save()
            success = True
    except:
        log('SEND_TASK_PREPARE', 'ID:%s' % (task.id), 'celery', 'error')
        if not success:
            task.stat = 'pre.fail'
            task.save()
コード例 #27
0
ファイル: cmpp2client.py プロジェクト: wjchao9111/X
    def cmpp_connect(self):
        sp_id = self.config.cmpp_sp_id.encode()
        sp_pwd = self.config.cmpp_sp_pwd.encode()
        version = (self.config.cmpp_version_1, self.config.cmpp_version_2)
        str_timestamp = time.strftime('%m%d%H%M%S')
        timestamp = long(str_timestamp)
        authenticatorSource = hashlib.md5(sp_id + ('\0' * 9) + sp_pwd + str_timestamp).digest()
        version = version[0] * (1 << 4) + version[1] * (1 ^ 0)

        connect = CMPP2_CONNECT()
        connect.sequence_Id = self.frm_seq.get_next()
        connect.sp_id = sp_id
        connect.authenticatorSource = authenticatorSource
        connect.version = version
        connect.timestamp = timestamp

        frame = connect
        log(
            title='CMPP2_SEND_FRAME_%s_%s_%s' % (
                self.config.cmpp_sp_id.encode(), self.config.cmpp_src_id.encode(),
                Cmpp2FrameHandler.ID_TO_NAME[frame.ID]),
            content=frame.__dict__,
            logger='sms',
            level='debug'
        )
        self.socket_client.send(connect)

        # connect_resp=CMPP2_CONNECT_RESP
        connect_resp = self.socket_client.recv()

        frame = connect_resp
        log(
            title='CMPP2_RECEIVE_FRAME_%s_%s_%s' % (
                self.config.cmpp_sp_id.encode(), self.config.cmpp_src_id.encode(),
                Cmpp2FrameHandler.ID_TO_NAME[frame.ID]),
            content=frame.ID == 0x00000005 and [frame.__dict__, frame.status_report.__dict__] or frame.__dict__,
            logger='sms',
            level='debug'
        )
        return connect_resp.status
コード例 #28
0
    def cmpp_connect(self):
        sp_id = self.config.cmpp_sp_id.encode()
        sp_pwd = self.config.cmpp_sp_pwd.encode()
        version = (self.config.cmpp_version_1, self.config.cmpp_version_2)
        str_timestamp = time.strftime('%m%d%H%M%S')
        timestamp = long(str_timestamp)
        authenticatorSource = hashlib.md5(sp_id + ('\0' * 9) + sp_pwd +
                                          str_timestamp).digest()
        version = version[0] * (1 << 4) + version[1] * (1 ^ 0)

        connect = CMPP2_CONNECT()
        connect.sequence_Id = self.frm_seq.get_next()
        connect.sp_id = sp_id
        connect.authenticatorSource = authenticatorSource
        connect.version = version
        connect.timestamp = timestamp

        frame = connect
        log(title='CMPP2_SEND_FRAME_%s_%s_%s' %
            (self.config.cmpp_sp_id.encode(), self.config.cmpp_src_id.encode(),
             Cmpp2FrameHandler.ID_TO_NAME[frame.ID]),
            content=frame.__dict__,
            logger='sms',
            level='debug')
        self.socket_client.send(connect)

        # connect_resp=CMPP2_CONNECT_RESP
        connect_resp = self.socket_client.recv()

        frame = connect_resp
        log(title='CMPP2_RECEIVE_FRAME_%s_%s_%s' %
            (self.config.cmpp_sp_id.encode(), self.config.cmpp_src_id.encode(),
             Cmpp2FrameHandler.ID_TO_NAME[frame.ID]),
            content=frame.ID == 0x00000005
            and [frame.__dict__, frame.status_report.__dict__]
            or frame.__dict__,
            logger='sms',
            level='debug')
        return connect_resp.status
コード例 #29
0
    def start_serv(self):
        self.status = 'running'
        while self.status:
            try:
                client = Client(self.config.qtpp_wsdl_url.encode())
                self.sms_mt = client.service.smsMt
                break
            except:
                log(
                    title='QTPP_START_SERV_ERROR',
                    content=self.config.__dict__,
                    logger='sms',
                    level='error'
                )

        while self.status:
            sms_list = self.task_queue.fetch_sms(self.fetch_size)
            if sms_list:
                for sms in sms_list:
                    self.send_one(sms)
            else:
                sleep(self.fetch_interval)
コード例 #30
0
 def send_one(self, msg):  # ack 暂时不支持群发
     mobile_list = msg.mobile.encode().split(',')
     resultcode = '-1'
     result_list = []
     try:
         req_xml = self.get_req_xml(msg)
         log(
             title='QTPP_SEND_REQ_XML_%s' % msg.ec_code,
             content=req_xml,
             logger='sms',
             level='debug'
         )
         rsp_xml = self.sms_mt(req_xml)
         rsp_xml = unicode(rsp_xml).encode('utf8')
         log(
             title='QTPP_SEND_RSP_XML_%s' % msg.ec_code,
             content=rsp_xml,
             logger='sms',
             level='debug'
         )
         resultcode, result_list = self.parse_rsp_xml(rsp_xml)
     except:
         log(
             title='QTPP_SEND_ERROR_%s' % msg.ec_code,
             content=None,
             logger='sms',
             level='error'
         )
     for result in result_list:
         mobile = result.get('mobile')
         mobile_list.remove(mobile)
         result['sms_obj'] = msg
         self.handler.sms_ack(self, result)
     for mobile in mobile_list:
         result = {'mobile': mobile, 'oprnum': msg.id, 'resultcode': resultcode, 'sms_obj': msg}
         self.handler.sms_ack(self, result)
コード例 #31
0
ファイル: cmpp2client.py プロジェクト: wjchao9111/X
    def recv_once(self):
        frame = self.socket_client.recv()
        ID = frame.ID
        log(
            title='CMPP2_RECEIVE_FRAME_%s_%s_%s' % (
                self.config.cmpp_sp_id.encode(), self.config.cmpp_src_id.encode(),
                Cmpp2FrameHandler.ID_TO_NAME[frame.ID]),
            content=frame.ID == 0x00000005 and [frame.__dict__, frame.status_report.__dict__] or frame.__dict__,
            logger='sms',
            level='debug'
        )

        if ID == CMPP2_TERMINATE.ID:
            terminate = frame
            terminate_resp = CMPP2_TERMINATE_RESP()
            self.send_queue_put(terminate_resp, terminate)
        elif ID == CMPP2_DELIVER.ID:
            deliver = frame
            deliver_resp = self.recv_sms(frame)
            self.send_queue_put(deliver_resp, deliver)
        elif ID == CMPP2_ACTIVE_TEST:
            active_test = frame
            active_test_resp = CMPP2_ACTIVE_TEST_RESP()
            active_test_resp.reserve = 0
            self.send_queue_put(active_test_resp, active_test)

        elif ID == CMPP2_TERMINATE_RESP.ID:
            self.socket_client.close()
            raise Cmpp2TerminateException('TERMINATE')
        elif ID == CMPP2_SUBMIT_RESP.ID:
            cmpp_submit_resp = CMPP2_SUBMIT_RESP
            cmpp_submit_resp = frame
            sequence_Id = cmpp_submit_resp.sequence_Id
            msg = self.commit_resp_wait_list_get(sequence_Id)
            if msg:
                if cmpp_submit_resp.result == 8:
                    self.commit_queue.put((msg.get('sms_obj'), False))  # True 一次重发
                else:
                    msg['msg_id'] = cmpp_submit_resp.msg_id
                    msg['result'] = cmpp_submit_resp.result
                    self.handler.sms_ack(self, msg)
            else:
                log(
                    title='CMPP2_SUBMIT_RESP_MATCH_NO_SEQID_%s_%s' % (
                        self.config.cmpp_sp_id.encode(), self.config.cmpp_src_id.encode()),
                    content=frame.ID == 0x00000005 and [frame.__dict__, frame.status_report.__dict__] or frame.__dict__,
                    logger='sms',
                    level='debug'
                )

        elif ID in (
                CMPP2_CONNECT.ID,
                CMPP2_CONNECT_RESP.ID,
                CMPP2_SUBMIT.ID,
                CMPP2_DELIVER_RESP.ID,
                CMPP2_QUERY.ID,
                CMPP2_QUERY_RESP.ID,
                CMPP2_CANCEL.ID,
                CMPP2_CANCEL_RESP.ID,
                CMPP2_ACTIVE_TEST_RESP.ID
        ):
            pass
        else:
            raise Cmpp2UnknownCommandIDException("bad id = 0x%08x" % ID)
        return frame