-from Components.MenuList import MenuList
-from Components.Label import Label, MultiColorLabel
-from Components.ConfigList import ConfigListScreen
-from Components.config import config, ConfigSubsection, ConfigPosition, getConfigListEntry, ConfigBoolean, ConfigInteger, ConfigText, ConfigSelection, configfile, getCharValue
-
-from enigma import eTimer, eConsoleAppContainer, getDesktop, eServiceReference, iPlayableService, iServiceInformation, RT_HALIGN_LEFT, RT_HALIGN_RIGHT, RT_HALIGN_CENTER, RT_VALIGN_CENTER, getPrevAsciiCode, eRCInput, fbClass
-
-import os, struct, threading, stat, select, time, socket, select
-
-strIsEmpty = lambda x: x is None or len(x) == 0
-
-HBBTVAPP_PATH = "/usr/local/hbb-browser"
-COMMAND_PATH = '/tmp/.sock.hbbtv.cmd'
-
-class GlobalValues:
- command_util = None
- command_server = None
-
- before_service = None
-
- channel_info_sid = None
- channel_info_onid = None
- channel_info_tsid = None
- channel_info_name = None
- channel_info_orgid = None
-
- hbbtv_handelr = None
-
- packet_m = 0xBBADBEE
- packet_h = '!IIII'
- packet_hl = struct.calcsize(packet_h)
-__gval__ = GlobalValues()
-
-def getPacketHeaders():
- global __gval__
- return (__gval__.packet_m, __gval__.packet_h, __gval__.packet_hl)
-
-def setChannelInfo(sid, onid, tsid, name, orgid):
- if sid is None: sid = 0;
- if onid is None: onid = 0;
- if tsid is None: tsid = 0;
- if name is None: name = "";
- if orgid is None: orgid = 0;
- global __gval__
- __gval__.channel_info_sid = sid
- __gval__.channel_info_onid = onid
- __gval__.channel_info_tsid = tsid
- __gval__.channel_info_name = name
- __gval__.channel_info_orgid = orgid
- print "Set Channel Info >> sid : %X, onid : %X, tsid : %X, name : %s, orgid : %d " % (sid, onid, tsid, name, orgid)
-def getChannelInfos():
- global __gval__
- print "Get Channel Info >> sid : %X, onid : %X, tsid : %X, name : %s, orgid : %d " % (__gval__.channel_info_sid,
- __gval__.channel_info_onid, __gval__.channel_info_tsid, __gval__.channel_info_name, __gval__.channel_info_orgid)
- return (__gval__.channel_info_sid,
- __gval__.channel_info_onid,
- __gval__.channel_info_tsid,
- __gval__.channel_info_name,
- __gval__.channel_info_orgid)
-
-def getCommandUtil():
- global __gval__
- return __gval__.command_util
-def getCommandServer():
- global __gval__
- return __gval__.command_server
-
-def setBeforeService(s):
- global __gval__
- __gval__.before_service = s
-def getBeforeService():
- global __gval__
- return __gval__.before_service
-
-def _unpack(packed_data):
- (mg, h, hlen) = getPacketHeaders()
-
- if strIsEmpty(packed_data):
- return None
- (m, o, l, s) = struct.unpack(h, packed_data[:hlen])
- if m != mg:
- return None
- d = 0
- if l > 0:
- d = packed_data[hlen:hlen+l]
- return (o,d,s)
-
-def _pack(opcode, params=None, reserved=0):
- (m, h, hlen) = getPacketHeaders()
- if strIsEmpty(params):
- params = ''
- packed_data = struct.pack(h, m, opcode, len(params), reserved)
- return packed_data + params
-
-class MMSStreamURL:
- headers = [
- 'GET %s HTTP/1.0'
- ,'Accept: */* '
- ,'User-Agent: NSPlayer/7.10.0.3059 '
- ,'Host: %s '
- ,'Connection: Close '
- ]
-
- def __init__(self):
- self.sendmsg = ''
- for m in self.headers:
- self.sendmsg += m + '\n'
- self.sendmsg += '\n\n'
-
- def request(self, host, port=80, location='/'):
- sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
- sock.connect((host, port))
- sock.send(self.sendmsg%(location, host))
- print "Send Data : "
- print self.sendmsg%(location, host)
- fullydata = ''
- while 1:
- res = sock.recv(1024)
- if res == '': break
- fullydata += res
- sock.close()
- return fullydata
-
- def parse(self, data):
- for d in data.splitlines():
- if d.startswith('Location: '):
- return d[9:]
- return None
-
- def getLocationData(self, url):
- url_list,host,location = None,None,None
- try:
- url = url[url.find(':')+3:]
- url_list = url.split('/')
- host = url_list[0]
- location = url[len(url_list[0]):]
- except Exception, err_msg:
- print err_msg
- return None
- html = self.request(host=host, location=location)
- return self.parse(html)
-
-class OpCodeSet:
- def __init__(self):
- self._opcode_ = {
- "OP_UNKNOWN" : 0x0000
- ,"OP_HBBTV_EXIT" : 0x0001
- ,"OP_HBBTV_OPEN_URL" : 0x0002
- ,"OP_HBBTV_LOAD_AIT" : 0x0003
- ,"OP_HBBTV_UNLOAD_AIT" : 0x0004
- ,"OP_HBBTV_FULLSCREEN" : 0x0005
- ,"OP_HBBTV_TITLE" : 0x0006
- ,"OP_OIPF_GET_CHANNEL_INFO_URL" : 0x0101
- ,"OP_OIPF_GET_CHANNEL_INFO_AIT" : 0x0102
- ,"OP_OIPF_GET_CHANNEL_INFO_LIST": 0x0103
- ,"OP_VOD_URI" : 0x0201
- ,"OP_VOD_PLAY" : 0x0202
- ,"OP_VOD_STOP" : 0x0203
- ,"OP_VOD_PAUSE" : 0x0204
- ,"OP_VOD_STATUS" : 0x0205
- ,"OP_VOD_FORBIDDEN" : 0x0206
- ,"OP_BROWSER_OPEN_URL" : 0x0301
- }
- self._opstr_ = {
- 0x0000 : "OP_UNKNOWN"
- ,0x0001 : "OP_HBBTV_EXIT"
- ,0x0002 : "OP_HBBTV_OPEN_URL"
- ,0x0003 : "OP_HBBTV_LOAD_AIT"
- ,0x0004 : "OP_HBBTV_UNLOAD_AIT"
- ,0x0005 : "OP_HBBTV_FULLSCREEN"
- ,0x0006 : "OP_HBBTV_TITLE"
- ,0x0101 : "OP_OIPF_GET_CHANNEL_INFO_URL"
- ,0x0102 : "OP_OIPF_GET_CHANNEL_INFO_AIT"
- ,0x0103 : "OP_OIPF_GET_CHANNEL_INFO_LIST"
- ,0x0201 : "OP_VOD_URI"
- ,0x0202 : "OP_VOD_PLAY"
- ,0x0203 : "OP_VOD_STOP"
- ,0x0204 : "OP_VOD_PAUSE"
- ,0x0205 : "OP_VOD_STATUS"
- ,0x0206 : "OP_VOD_FORBIDDEN"
- ,0x0301 : "OP_BROWSER_OPEN_URL"
- }
-
- def get(self, opstr):
- try:
- return self._opcode_[opstr]
- except: pass
- return self._opcode_["OP_UNKNOWN"]
-
- def what(self, opcode):
- try:
- return self._opstr_[opcode]
- except: pass
- return self._opstr_["0x0000"]
-
-class SocketParams:
- def __init__(self):
- self.protocol = None
- self.type = None
- self.addr = None
- self.buf_size = 4096
- self.handler = None
- self.timeout = 5
- self.destroy = None
-
-class StreamServer:
- def __init__(self, params):
- self._protocol = params.protocol
- self._type = params.type
- self._addr = params.addr
- self._buf_size = params.buf_size
- self._handler = params.handler
- self._timeout = params.timeout
- self._destroy = params.destroy
-
- self._terminated = False
- self._server_thread = None
-
- self.onHbbTVCloseCB = []
- self.onSetPageTitleCB = []
-
- def __del__(self):
- if self._destroy is not None:
- self._destroy(self._addr)
-
- def stop(self):
- self._terminated = True
- if self._server_thread is not None:
- self._server_thread.join()
- self._server_thread = None
-
- def start(self):
- self._socket = socket.socket(self._protocol, self._type)
- self._socket.settimeout(self._timeout)
- self._socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
- self._socket.bind(self._addr)
- self._socket.listen(True)
-
- self._server_thread = threading.Thread(target=self._listen)
- self._server_thread.start()
-
- def _listen(self):
- select_list = [self._socket]
- def _accept():
- try:
- conn, addr = self._socket.accept()
- self._client(conn, addr)
- except Exception, ErrMsg:
- print "ServerSocket Error >>", ErrMsg
- pass