QUOTE
-->Python Initialized<--
Traceback (most recent call last):
File "q:\scripts\CallerID.py", line 148, in ?
s.bind((HOST, IMPULSEPORT))
File "<string>", line 1, in bind
socket.gaierror: (4, 'getaddrinfo failed')
Here's how I have my script configured:
QUOTE
import socket
import xbmc, xbmcgui, threading, thread
from time import *
from string import *
MYAREACODE = "301" # SPECIFY YOUR AREA CODE
DELAY = 5 # SPECIFY DELAY BEFORE CLOSE IN SECONDS
DOLOG = 0 # SPECIFY WHETHER OR NOT TO WRITE TO LOG
DOIMAGE = 0 # SPECIFY WHETHER OR NOT TO DISPLAY PICTURE WITH DIALOG
SERVERTYPE = "IMPULSE" # SPECIFY EITHER "YAC", "CIDSENTRY" OR "IMPULSE"
YACPORT = 10629 # SPECIFY PORT FOR YAC
CIDSENTRYPORT = 4550 # SPECIFY PORT FOR CALLER ID SENTRY
CIDSENTRYIP = "192.168.0.49" # SPECIFY IP ADDRESS FOR CALLER ID SENTRY SERVER
IMPULSEPORT = 42684 # SPECIFY PORT FOR IMPULSE
BIGENDIAN = 0 # 0 OR 1, IF ONE DOESN'T WORK, TRY THE OTHER
HOST = 'Den2' # Symbolic name meaning the local host
class packet:
def __init__(self, type, param1, param2 = "", param3 = ""):
self.type = type
self.param1 = param1
self.param2 = param2
self.param3 = param3
def decodepacket(the_string):
if not(BIGENDIAN):
type = ord(the_string[3])
param1 = (ord(the_string[6]) * 256) + ord(the_string[7])
else:
type = ord(the_string[0])
param1 = (ord(the_string[5]) * 256) + ord(the_string[4])
param2 = the_string[8:72]
param3 = the_string[72:]
for i in range(-63, 0):
if ord(param2[-i]) == 0: param2 = param2[:-i]
if ord(param3[-i]) == 0: param3 = param3[:-i]
return packet(type, param1, param2, param3)
def encodepacket(the_packet):
r = " "
if not(BIGENDIAN):
r = r + chr(0)
else:
r = r + chr(the_packet.type)
r = r[1:]
r = r + chr(0)
r = r + chr(0)
if BIGENDIAN:
r = r + chr(0)
else:
r = r + chr(the_packet.type)
if not(BIGENDIAN):
r = r + chr(the_packet.param1 - ((the_packet.param1 / 256) * 256))
else:
r = r + chr(the_packet.param1 - ((the_packet.param1 / 256) * 256))
r = r + chr(the_packet.param1 / 256)
r = r + chr(0)
r = r + chr(0)
r = r + the_packet.param2
for i in range(len®, 72):
r = r + chr(0)
r = r + the_packet.param3
for i in range(len®, 136):
r = r + chr(0)
return r
def formatnumber( n ):
if len( n ) == 7:
return "(" + MYAREACODE + ") " + n[:3] + "-" + n[3:]
if len( n ) == 10:
return "(" + n[:3] + ") " + n[3:6] + "-" + n[6:]
if len( n ) == 11:
return n[0] + " (" + n[1:4] + ") " + n[4:7] + "-" + n[7:]
return n
def fileExists(f):
try:
file = open(f)
except IOError:
exists = 0
else:
exists = 1
return exists
class caller(xbmcgui.WindowDialog):
def __init__(self):
w = self.getWidth()
h = self.getHeight()
self.bg = xbmcgui.ControlImage(w - 282, h - 138, 222, 103, 'q:\\scripts\\CallerID\\dialog.png')
self.addControl(self.bg)
self.callerid = xbmcgui.ControlLabel(w - 275, h - 95, 151, 64, data, 'font13', '0xff000000')
self.addControl(self.callerid)
if not DOIMAGE:
self.title = xbmcgui.ControlLabel(w - 277, h - 133, 100, 10, 'Caller ID', 'font13', '0xffffffff')
self.addControl(self.title)
else:
self.frame = xbmcgui.ControlImage(w - 359, h - 138, 77, 103, 'q:\\scripts\\CallerID\\frame.png')
self.addControl(self.frame)
self.title = xbmcgui.ControlLabel(w - 354, h - 133, 100, 10, 'Caller ID', 'font13', '0xffffffff')
self.addControl(self.title)
filename = replace(number, '(', '')
filename = replace(filename, ')', '')
filename = replace(filename, ' ', '')
filename = replace(filename, '-', '')
filename = 'q:\\scripts\\CallerID\\' + filename + '.jpg'
if not fileExists(filename): filename = 'q:\\scripts\\CallerID\\default.jpg'
self.tn = xbmcgui.ControlImage(w - 359, h - 112, 77, 77, filename)
self.addControl(self.tn)
self.a = -1
self.shown = 1
subThread = threading.Thread(target=self.SubthreadProc, args=())
subThread.start()
def SubthreadProc(self):
sleep(DELAY)
if self.shown:
self.close()
def onAction(self, action):
if self.a == action:
self.shown = 0
self.close()
self.a = action
if SERVERTYPE == "CIDSENTRY":
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setblocking(1)
s.bind((HOST, CIDSENTRYPORT))
req = packet(1, CIDSENTRYPORT)
rpack = encodepacket(req)
s.sendto(rpack, (CIDSENTRYIP, CIDSENTRYPORT))
elif SERVERTYPE == "IMPULSE":
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setblocking(1)
s.bind((HOST, IMPULSEPORT))
req = packet(1, IMPULSEPORT)
else:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, YACPORT))
data = ""
name = ""
number = ""
while 1:
if SERVERTYPE == "YAC":
s.listen(1)
conn, addr = s.accept()
a = conn.recv(1024)
alist = split(a[5:], "~")
if len(alist) > 1:
name = alist[0]
number = alist[1]
data = number + "\n" + name
else:
data = a
elif SERVERTYPE == "CIDSENTRY":
r = s.recv(1024)
p = decodepacket®
if p.type == 3:
name = p.param2
number = formatnumber(p.param3)
data = number + "\n" + name
elif SERVERTYPE == "IMPULSE":
r=s.recv(1024)
if r[:4] == "NAME":
name = r[5:]
elif r[:4] == "NMBR":
number = formatnumber(replace(r[5:], "-", ""))
if name != "" and number != "":
data = number + "\n" + name
if data != "":
print(data)
w = caller()
w.doModal()
del w
if DOLOG == 1:
log = open("q:\\scripts\\call_log.txt", "a")
logentry = asctime(localtime(time())) + ": " + replace(data, "\n", " (") + ")"
log.write(logentry + "\n")
log.close()
if SERVERTYPE == "YAC": conn.close()
data = ""
name = ""
number = ""
I only changed the settings that i needed to and did not mess with any of the actual code. I know for a fact the the CallerID info is being sent over the network properly because my WinXP clients display the info. I tried emailing the author, but I haven't heard back from him yet.
Anyone know what the problem is?
Thanks in advance.
-Matt