xboxscene.org forums

Author Topic: Trouble With Callerid Script  (Read 63 times)

matt11601

  • Archived User
  • Newbie
  • *
  • Posts: 21
Trouble With Callerid Script
« on: August 04, 2005, 08:19:00 AM »

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
Logged