#!/usr/bin/python
from optparse import OptionParser
import socket
import sys
import syslog
import re
import httplib, urllib


def sendtosyslogonerror(msg):
        """ send msg on syslog then exit """
        syslog.syslog(syslog.LOG_ERR,"SENDSMS: error " + msg)
        print "SENDSMS: error " , msg
        sys.exit(1)

# define the SMS page for sending sms
smsSendPage = '/smsEnvoi.php'
#smsSendPage = '/smsNumber.php'

""" check parameters """
parser = OptionParser()
parser.add_option("-L", "--login", dest="login", help="login sms auth")
parser.add_option("-p", "--passwd", dest="passwd", help="Passwd sms auth")
parser.add_option("-S", "--smsserver", dest="smsserver", help="Sms remote server")
parser.add_option("-P", "--port", dest="port", help="SMTP port, default 80",default=80, type="int")
parser.add_option("-d", "--debug", dest="debug", action="store_true",default=False,help="activate debug")
parser.add_option("-t", "--timeout", dest="timeout", help="Timeout for all socket operation, default 4s",default=4, type="int")
parser.add_option("-E", "--receivers", dest="receivers", help="List phone number to send (comma separated) ex: +33612233445")
parser.add_option("-F", "--smsfrom", dest="smsfrom", help="Name of the Sender")
parser.add_option("-T", "--smstype", dest="smstype", help="Sending Type : 1=immediate (default), 2=schedulled",default=1, type="int")
parser.add_option("-Q", "--smsquality", dest="smsquality", help="Quality : 1=low cost, 2=standard (default), 3=top - this only change the price",default=2, type="int")

(options, args) = parser.parse_args()
options.auth = True
if not options.receivers or not options.login or not options.passwd or not options.smsserver:
        sendtosyslogonerror("Error: missing parameters")

# read the message from the pipe
msg = sys.stdin.readlines()


params = urllib.urlencode({'userLogin': options.login, 'userPassword': options.passwd, 'smsCompo': msg, 'destsNums': options.receivers, 'destsNames': '', 'destsParam': '', 'destsParam4': '', 'typeEnvoi': options.smstype, 'quality': options.smsquality, 'sender': options.smsfrom, 'domain': options.smsserver, 'path': smsSendPage})
headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain"}

try:
        conn = httplib.HTTPConnection(options.smsserver,options.port,options.timeout)

        if options.debug == True:
                conn.set_debuglevel(1)


except  httplib.NotConnected:
        sendtosyslogonerror("Can't connect to server %s" % options.smsserver)

try:
	conn.request("POST", smsSendPage, params, headers)
except httplib.HTTPException, e:
	sendtosyslogonerror("ERROR" + str(e.reason))
except socket.gaierror:
	sendtosyslogonerror('Connection failed unexpectedly')

try:
	response = conn.getresponse()
except httplib.HTTPException, e:
	sendtosyslogonerror("ERROR" + str(e.reason))

data = response.read()
conn.close()

# display debug
if options.debug == True:
        print "response status : ",response.status
        print "response reason : ", response.reason
        print "data : ", data

sys.exit(0)

