06-25-2011, 01:19 AM
I'm trying to use Quick Macros to talk to EventGhost. Key codes have been inconsistently working, so I've gotten to the point where I've decided using TCP connections will probably be the best way. Anyway, I've got a plugin to receive events in EventGhost. I also have a python script that sends events.
I cannot, for the life of me, figure out how to get it working (by rewriting, etc).
I've attached the bit that does the sending.
Any hints?
- Derek
I cannot, for the life of me, figure out how to get it working (by rewriting, etc).
I've attached the bit that does the sending.
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#self.socket = sock
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.settimeout(2.0)
try:
sock.connect((self.host, self.port))
sock.settimeout(1.0)
# First wake up the server, for security reasons it does not
# respond by it self it needs this string, why this odd word ?
# well if someone is scanning ports "connect" would be very
# obvious this one you'd never guess :-)
sock.sendall("quintessence\n\r")
# The server now returns a cookie, the protocol works like the
# APOP protocol. The server gives you a cookie you add :<password>
# calculate the md5 digest out of this and send it back
# if the digests match you are in.
# We do this so that no one can listen in on our password exchange
# much safer then plain text.
cookie = sock.recv(128)
# Trim all enters and whitespaces off
cookie = cookie.strip()
# Combine the token <cookie>:<password>
token = cookie + ":" + self.password
# Calculate the digest
digest = md5(token).hexdigest()
# add the enters
digest = digest + "\n"
# Send it to the server
sock.sendall(digest)
# Get the answer
answer = sock.recv(512)
# If the password was correct and you are allowed to connect
# to the server, you'll get "accept"
if (answer.strip() != "accept"):
sock.close()
return False
# now just pipe those commands to the server
if (payload is not None) and (len(payload) > 0):
for pld in payload:
sock.sendall(
"payload %s\n" % pld.encode(eg.systemEncoding)
)
sock.sendall("payload withoutRelease\n")
sock.sendall(eventString.encode(eg.systemEncoding) + "\n")
return sock
except:
if eg.debugLevel:
eg.PrintTraceback()
sock.close()
self.PrintError("NetworkSender failed")
return None
Any hints?
- Derek