#!/usr/bin/python2.5
import cgi
import MySQLdb
print 'Content-Type: text/html'
print # Blank line marking end of HTTP headers

#-----------GLOBALS

sqlhost="localhost"
sqluser="db24031"
sqlpass="gnihi007"
sqldb="db24031"

usertable="user"
logtable="smslog"
preistable="prices"
#standard connect: dbh = MySQLdb.connect(host=sqlhost,db=sqldb,user=sqluser,passwd=sqlpass)

#---------MODULE CODE STARTS

def user_authenticate(user,password):
        dbh = MySQLdb.connect(host=sqlhost,db=sqldb,user=sqluser,passwd=sqlpass)
        cursor = dbh.cursor()
        query="SELECT * from "+usertable+" WHERE user='"+user+"' AND password='"+password+"'"
        #print query
        cursor.execute(query)
        result=cursor.fetchall()
        #print result[2]
        if len(result)==0:
                userauth="wrong"
        else:
                if result[0][1]==user and result[0][2]==password:
                    userauth="ok"
                else:
                    userauth="wrong"
        dbh.close
        dbh.close
        #print userauth
        return userauth

def credit_get(user):    
        dbh = MySQLdb.connect(host=sqlhost,db=sqldb,user=sqluser,passwd=sqlpass)
        cursor = dbh.cursor()
        query="SELECT * from "+usertable+" WHERE user='"+user+"'"
        #print query
        cursor.execute(query)
        result=cursor.fetchone()
        #print result[2]
        #print result[4]   
        credits = str(result[4])
        #print credits
        dbh.close
        return credits


def credit_check(user,price):    
        dbh = MySQLdb.connect(host=sqlhost,db=sqldb,user=sqluser,passwd=sqlpass)
        cursor = dbh.cursor()
        query="SELECT * from "+usertable+" WHERE user='"+user+"'"
        #print query
        cursor.execute(query)
        result=cursor.fetchone()
        #print result[2]
        #print result[4]   
        if result[4]>=0+float(price):
            credits="ok"
        else:
            credits="wrong"
        dbh.close
        return credits

def killcredits(user,number):
        dbh = MySQLdb.connect(host=sqlhost,db=sqldb,user=sqluser,passwd=sqlpass)
        cursor = dbh.cursor()
        query="SELECT * from "+usertable+" WHERE user='"+user+"'"
        cursor.execute(query)
        #print query
        result=cursor.fetchone()
        credits=result[4]
        #print credits
        credits=credits-float(number)
        query="UPDATE "+usertable+" SET credits='"+str(credits)+"' WHERE user='"+user+"'"
        cursor.execute(query)

def smssend(originator,recipient,text):
    import socket

    HOST = 'xml1.aspsms.com'    # The remote host
    PORT = 5061 # The same port as used by the server

    CONTENT="""<?xml version="1.0" encoding="ISO-8859-1"?>
    		<aspsms>
    			<Userkey>PYDT03P0MJXH</Userkey>
    			<Password>gnihi</Password>
    			<Originator>"""+ str(originator) +"""</Originator>
    			<Recipient>
    				<PhoneNumber>"""+ str(recipient) +"""</PhoneNumber>
    			</Recipient>
    			<MessageData>"""+ text +"""</MessageData>
    			<Action>SendTextSMS</Action>
    		</aspsms>"""
    		
    #print CONTENT
    length=len(CONTENT)
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((HOST, PORT))
    s.send("POST /xmlsvr.asp HTTP/1.0\r\n")
    s.send("Content-Type: text/xml\r\n")
    s.send("Content-Length: "+str(length)+"\r\n\r\n")
    s.send(CONTENT)
    datarecv=s.recv(1024)
    s.close()
    
def smslog(user,originator,recipient):
        #from time import gmtime, strftime,localtime    
        dbh = MySQLdb.connect(host=sqlhost,db=sqldb,user=sqluser,passwd=sqlpass)
        cursor = dbh.cursor()
        #time=str(strftime('%Y%m%d%H%M%S', localtime()))
        query="INSERT into "+logtable+" VALUES ('','"+str(user)+"','"+str(originator)+"','"+str(recipient)+"',NOW())"
        cursor.execute(query)

def get_price(prefix):
    if prefix[0:4]=="0041":
    	price = [0.09,5]
    	return price
    if prefix[0:4]=="0043":
    	price = [0.09,5]
    	return price
    if prefix[0:6]=="003620":
    	price = [0.17,1]
    	return price
    if prefix[0:4]=="0036":
    	price = [0.075,1]
    	return price
    D={}
    dbh = MySQLdb.connect(host=sqlhost,db=sqldb,user=sqluser,passwd=sqlpass)
    query = "select * from "+preistable+""
    cursor=dbh.cursor()
    cursor.execute(query)
    
    result=cursor.fetchall()

    count=len(result)
    #print count

    for number in range(count):
        D[result[number][1]]=[result[number][2],result[number][3]]

    if D.has_key(prefix)==1:
        price = D[prefix]
    else:
        price = D['default']

    return price

def smssendclickatell(originator,recipient,text):
        import urllib
        params = urllib.urlencode({'api_id': '4213', 'user': 'yomega', 'password': 'gnihi007', 'from': str(originator),'to': str(recipient[2:]),'text': str(text)})
        f = urllib.urlopen("http://api.clickatell.com/http/sendmsg?%s" % params)
        back=f.read()

def smssendiglusoft(originator,recipient,text):
        import urllib
        text = urllib.urlencode({'':text})
        text = text[1:]

        absender = urllib.urlencode({'':originator})
        absender = absender[1:]

        f = urllib.urlopen("http://212.223.1.11/service/public/?data="+recipient+"|"+text+"|"+absender+"|&user=181479&passwort=gnihi007")
        back=f.read()

def smssendmassenversand(originator,recipient,text,flash):
        import urllib
        text = urllib.urlencode({'':text})
        text = text[1:]
        
#http://www.massenversand.de/smsexec/yomega/sendsmsMA.asp?absender=testabs&empfaenger=00491735671888&text=OA&id=220031&pw=yo4me77ga

        absender = urllib.urlencode({'':originator})
        absender = absender[1:]
        
        if flash=="yes":
        	typ="f"
        if flash==None:
        	typ="t"
        
        
        f = urllib.urlopen("http://www.massenversand.de/smsexec/yomega/sendsms.asp?absender="+absender+"&empfaenger="+recipient+"&text="+text+"&id=220031&pw=yo4me77ga&typ="+typ)
        back=f.read()
        #print back
        #print "jau"
        #print "'"+str(text)+"'"
        
def smssendmassenversand_swiss(originator,recipient,text,flash):
        import urllib
        text = urllib.urlencode({'':text})
        text = text[1:]
        
#http://www.massenversand.de/smsexec/yomega/sendsmsMA.asp?absender=testabs&empfaenger=00491735671888&text=OA&id=220031&pw=yo4me77ga

        absender = urllib.urlencode({'':originator})
        absender = absender[1:]
        
        if flash=="yes":
        	typ="f"
        if flash==None:
        	typ="t"
        
        
        f = urllib.urlopen("http://www.massenversand.de/smsexec/yomegaOAPP/sendsms.asp?absender="+absender+"&empfaenger="+recipient+"&text="+text+"&id=2200305&pw=yo4me77dd&typ="+typ)
        back=f.read()
        #print back
        #print "jau"
        #print "'"+str(text)+"'"

def smssendsmselling(originator,recipient,text):
        import urllib
        text = urllib.urlencode({'':text})
        text = text[1:]
        absender = urllib.urlencode({'':originator})
        absender = absender[1:]

        f = urllib.urlopen("http://gateway.mobilant.net/?key=e4f9f4cd588adb3f8f40aa244552111d&text="+text+"&handynr="+recipient+"&kennung="+absender)
        back=f.read()


#----------------REAL Code starts

post = cgi.FieldStorage()

if post.getvalue("what")=="credits":
        #print "credits"
        user = post.getvalue("user")
        passwrd = post.getvalue("pass")
        usrchk = user_authenticate(user,passwrd)
        if usrchk=="wrong":
            error=-1
        if usrchk=="ok":
            error=credit_get(user)
        print error
        
if post.getvalue("what")=="textsms":
        userfrompost = post.getvalue("user")
        passwrdfrompost = post.getvalue("pass")
        originatorfrompost = post.getvalue("from")
        recipientfrompost = post.getvalue("to")
        smstext = post.getvalue("text")
        flash = post.getvalue("flash")
        
        #print recipientfrompost[0:7]
                
        usrchk = user_authenticate(userfrompost,passwrdfrompost)
        #print usrchk
        if usrchk=="wrong":
            error=5000

        length=len(smstext)

        if length>160:
                lengthcheck="wrong"
                error=5003
        else:
                lengthcheck="ok"
        
        if usrchk=="ok" and lengthcheck=="ok":
            price = get_price(recipientfrompost[0:7])
            #print str(price[0]) + "<br>"
            #print "jetzat credits chegge"
            allclear=credit_check(userfrompost,price[0])
            #print allclear
            if allclear=="ok":
                if price[1]==1:
                        #print "1"
                        smssend(originatorfrompost,recipientfrompost,smstext)
                if price[1]==2:
                        #print "2"
                        smssendclickatell(originatorfrompost,recipientfrompost,smstext)
                if price[1]==3:
                        #print "3"
                        smssendmassenversand(originatorfrompost,recipientfrompost,smstext,flash)
                if price[1]==4:
                	smssendsmselling(originatorfrompost,recipientfrompost,smstext)
                if price[1]==5:
                	#print "swiss"
                	smssendmassenversand_swiss(originatorfrompost,recipientfrompost,smstext,flash)
                #print "Kosten: " + str(price) + "Prefix: " + str(recipientfrompost[0:7]) + "<br>"
                killcredits(userfrompost,price[0])
                smslog(userfrompost,originatorfrompost,recipientfrompost)
                error=5002
            else:
                error=5001
        print str(error)