示例#1
0
文件: server.py 项目: Laumm/cnp
 def handle_register(self,data) :
     logging.debug("register receive {}".format(data))
     if not protocol.can_parse(data) :
         logging.info("receive invalid  data")
         raise Exception("receive invalid  data ")
     ty = protocol.view_frame_type(data)
     body = protocol.get_frame_data(data)
     if ty != protocol.FRAME_REGISTER :
         logging.info("receive invalid  data")
         raise Exception("receive invalid  data")
     tports ,_ = protocol.parse_register_data(body)
     print(tports)
     try :
         for tport in tports :
             listen_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
             listen_socket.bind(('127.0.0.1', tport[1]))
             listen_socket.listen(5)
             logging.debug("register port ... ")
             logging.debug(listen_socket)
             self.proxy_sockets.append(listen_socket)
             self.proxy_socket_map[listen_socket] = tport[0]
     except :
         body = protocol.terminate_data(Server.maver,Server.miver,0x21)
         data = protocol.add_frame_head(protocol.FRAME_TERMINATE,body)
         self.ssock.send(data)
         raise
     logging.info("port register success ")
     return 
示例#2
0
文件: stream.py 项目: Laumm/cnp
 def handle_recv(self, sock):
     stream = self.stream_sock_map.get_v(sock)
     data = stream.recv_msg()
     if data == b'':  # 目标socket close
         self.reset_stream(stream.stream_id, 0x0)
         return
     if stream.closed:
         return
     msg = protocol.add_frame_head(protocol.FRAME_DATA, data,
                                   stream.stream_id)
     self.ssock_queue.put(msg)
     return
示例#3
0
文件: stream.py 项目: Laumm/cnp
    def reset_stream(self, stream_id, code):
        # 发送关闭流帧
        logging.debug(" clost stream id={} code={}".format(stream_id, code))
        body = protocol.reset_stream_data(code)
        msg = protocol.add_frame_head(protocol.FRAME_RST_STREAM, body,
                                      stream_id)
        self.ssock_queue.put(msg)

        # 将流更改为close ,并加入到待销毁
        stream = self.stream_map[stream_id]
        stream.closed = True
        self.add_stream_destory(stream)
        return
示例#4
0
    def init(self):
        logging.info(" connect server ...  ")
        # 与服务端建立连接 ,并且发送认认证和端口注册信息
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.connect((self.server_ip, self.server_port))
        self.ssock = sock
        self.stream_manager = stream.StreamManager(self.ssock,
                                                   self.ssock_queue)

        # 认证信息
        auth_body = protocol.auth_data(Client.mar_version, Client.min_version,
                                       self.uname, self.passwd)
        auth_msg = protocol.add_frame_head(protocol.FRAME_AUTH, auth_body)
        self.ssock_queue.put(auth_msg)

        # 端口信息
        register_body = protocol.register_data(self.tcp_ports, self.udp_ports)
        print(register_body)
        register_msg = protocol.add_frame_head(protocol.FRAME_REGISTER,
                                               register_body)
        self.ssock_queue.put(register_msg)
        return
示例#5
0
文件: server.py 项目: Laumm/cnp
 def handle_auth(self,data):
     logging.info("handle auth receive {}".format(data))
     if not protocol.can_parse(data):
         logging.info("receive  invalid  data ")
         raise Exception("receive invalid data  ")
     ty = protocol.view_frame_type(data)
     body = protocol.get_frame_data(data)
     if ty != protocol.FRAME_AUTH :
         logging.info("receive invalid data ")
         raise Exception("receive invalid data ")
     maver ,miver ,uname,passwd = protocol.parse_auth_data(body)
     logging.info('version={}.{} uname={} passwd={}'.format(maver,miver,uname,passwd))
     if (maver,miver) != (Server.maver,self.miver) :
         body = protocol.terminate_data(Server.maver,Server.miver,0x2)
         data = protocol.add_frame_head(protocol.FRAME_TERMINATE,body)
         self.ssock.send(data)
         raise Exception(" version error ")
     if (uname,passwd) != (self.uname,self.passwd) :
         body = protocol.terminate_data(Server.maver,Server.miver,0x12)
         data = protocol.add_frame_head(protocol.FRAME_TERMINATE,body)
         self.ssock.send(data)
         raise Exception(" uname or passwd error   ")
     logging.info("client auth success")
     return 
示例#6
0
文件: stream.py 项目: Laumm/cnp
    def open_stream(self, ty, rport, sock):
        # 发送对应帧
        stream_id = self.generate_stream_id()
        logging.debug("open stream  id={} ty={} rport={}".format(
            stream_id, ty, rport))
        body = protocol.open_stream_data(ty, rport, stream_id)
        msg = protocol.add_frame_head(protocol.FRAME_OPEN_STREAM, body)
        self.ssock_queue.put(msg)

        # 建立对应流
        stream = Stream(stream_id, sock)
        self.stream_map[stream_id] = stream
        self.stream_sock_map.put(stream, sock)

        self.inputs.append(sock)
        return