-
-
Save mattpr/39a09d626d65045ffe08 to your computer and use it in GitHub Desktop.
Command Line Tool to send an SMS via the Sipgate API found on <http://irq0.org/Code?action=AttachFile&do=view&target=sms.py> on 2008-03-16
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/sms.conf.prod |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[account] | |
user: [email protected] | |
passwd: foobar | |
sip_local_uri: sip:[email protected] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#! /usr/bin/python | |
# -*- coding: utf-8 -*- | |
import sys,os | |
import getopt | |
import re | |
import xmlrpclib | |
from ConfigParser import ConfigParser | |
IDENT={'ClientName': 'd3media.de sms-tool', | |
'ClientVersion': '20150908'} | |
PATH=sys.path[0] | |
def cli(): | |
# parse commandline | |
try: | |
opts, args = getopt.getopt(sys.argv[1:], "hn:t:f:a") | |
except getopt.GetoptError: | |
# print help information and exit: | |
printUsage() | |
sys.exit(23) | |
caller_id = None | |
text = None | |
ask = False | |
for o, a in opts: | |
if o == "-h": | |
printUsage() | |
sys.exit() | |
if o == "-n": | |
caller_id = a | |
if o == "-t": | |
text = a | |
if o == "-f": | |
text = readFile(a) | |
if o == "-a": | |
ask = True | |
if not caller_id: | |
caller_id = raw_input("Caller ID: ") | |
if not text: | |
text = "" | |
line = "" | |
while line != '.': | |
line = sys.stdin.readline()[:-1] | |
text += line + "\n" | |
# input checks | |
caller_id = caller_id.strip().replace(" ","").replace("-","").replace("/","") | |
# convert caller_id to sip_uri | |
sip_uri = "" | |
if re.compile("^49[1-9][0-9]*$").match(caller_id): | |
#print "match ^49[1-9][0-9]*$ " | |
sip_uri = "sip:%[email protected]" % (caller_id) | |
elif re.compile("^0[1-9][0-9]*$").match(caller_id): | |
#print "match ^0[1-9][0-9]*$" | |
sip_uri = "sip:49%[email protected]" % (caller_id[1:]) | |
elif re.compile("^\+49[1-9][0-9]*$").match(caller_id): | |
#print "match ^+49[1-9][0-9]*$" | |
sip_uri = "sip:%[email protected]" % (caller_id[1:]) | |
elif re.compile("^00[1-9][0-9]*$").match(caller_id): | |
#print "match ^00[1-9][0-9]*$" | |
sip_uri = "sip:%[email protected]" % (caller_id[2:]) | |
else: | |
print "Invalid destination number. Exiting." | |
sys.exit(23) | |
# open config file | |
config = ConfigParser() | |
config.read([os.path.join(PATH,'sms.conf')]) | |
user = config.get('account','user') | |
passwd = config.get('account','passwd') | |
sip_local_uri = config.get('account','sip_local_uri') | |
# open connection | |
print "going to open connection" | |
sipgate = initConnection(user, passwd) | |
print "connection open" | |
if ask: | |
print "Really send SMS message?" | |
print "sip uri:", sip_uri | |
print "text:\n", text | |
confirm = raw_input("(y/n) ") | |
if str(confirm) == 'n': | |
sys.exit(0) | |
sms(sipgate, sip_uri, text, sip_local_uri) | |
def readFile(filename): | |
try: | |
f = file(filename, 'r') | |
return f.read() | |
except IOError: | |
print "error reading file ..exiting" | |
sys.exit(23) | |
def printUsage(): | |
print """ | |
sms.py - simple sms tool for sipgate using xmlrpc | |
author: Marcel Lauhoff <[email protected]> | |
usage: | |
sms.py [OPTIONS] | |
when called without args caller id and text is read from commandline | |
-n <caller_id> destination caller id | |
-t <text> sms text | |
-f <filename> file containing sms text | |
-a ask for confirmation before sending | |
""" | |
def sms(rpc_conn, sip_uri, text, sip_local_uri): | |
result = rpc_conn.samurai.SessionInitiate({'LocalUri': sip_local_uri, | |
'RemoteUri': sip_uri, | |
'TOS': 'text', | |
'Content': text}) | |
if result['StatusCode'] == 200: | |
print "SMS sent :)" | |
else: | |
print "SMS send failed :(" | |
sys.exit(23) | |
def initConnection(user, passwd): | |
# open connection | |
#sipgate = xmlrpclib.ServerProxy("https://%s:%[email protected]/RPC2" % (user, passwd)) | |
sipgate = xmlrpclib.ServerProxy("https://%s:%[email protected]/RPC2" % (user, passwd)) | |
# do identify | |
result = sipgate.samurai.ClientIdentify(IDENT) | |
if result['StatusCode'] == 200: | |
# print "Command ClientIdentify successful" | |
pass | |
else: | |
print "Command ClientIdentify failed.. exiting" | |
sys.exit(23) | |
return sipgate | |
if __name__ == '__main__': cli() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment