summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgsmselftest2011-10-20 18:14:09 +0200
committergsmselftest2011-10-20 18:14:09 +0200
commit8c16ed8663a52c827ed562ea9bdbd7de02a48906 (patch)
tree538a807fe1bdb3bb8f0abf819750147ce4e98b5d
parentMerge branch 'master' of lab.ks.uni-freiburg.de:lsfks/projekte/gsm-selftest (diff)
downloadgsm-selftest-8c16ed8663a52c827ed562ea9bdbd7de02a48906.tar.gz
gsm-selftest-8c16ed8663a52c827ed562ea9bdbd7de02a48906.tar.xz
gsm-selftest-8c16ed8663a52c827ed562ea9bdbd7de02a48906.zip
almost final version
-rwxr-xr-xFor Weekly Test/Advance/gsmselftest-website2.py5
-rwxr-xr-xFor Weekly Test/tricode/ClientClass.py123
-rw-r--r--For Weekly Test/tricode/ClientClass.pycbin0 -> 3628 bytes
-rwxr-xr-xFor Weekly Test/tricode/ControllerClass.py231
-rw-r--r--For Weekly Test/tricode/ControllerClass.pycbin0 -> 7712 bytes
-rwxr-xr-xFor Weekly Test/tricode/DbClass.py322
-rw-r--r--For Weekly Test/tricode/DbClass.pycbin0 -> 8442 bytes
-rwxr-xr-xFor Weekly Test/tricode/GSM EPlus handler.log40
-rwxr-xr-xFor Weekly Test/tricode/GSM O2 handler.log112
-rwxr-xr-xFor Weekly Test/tricode/GSM RZ1 handler.log445
-rwxr-xr-xFor Weekly Test/tricode/GSM TMobile handler.log56
-rwxr-xr-xFor Weekly Test/tricode/GSM Vodaphone handler.log56
-rwxr-xr-xFor Weekly Test/tricode/GSMClass.py304
-rw-r--r--For Weekly Test/tricode/GSMClass.pycbin0 -> 7163 bytes
-rw-r--r--For Weekly Test/tricode/GSMExt.Eplus handler.log0
-rw-r--r--For Weekly Test/tricode/GSMExt.O2 handler.log0
-rw-r--r--For Weekly Test/tricode/GSMExt.Tm handler.log0
-rw-r--r--For Weekly Test/tricode/GSMExt.Voda handler.log0
-rwxr-xr-xFor Weekly Test/tricode/GSMHandler.py272
-rw-r--r--For Weekly Test/tricode/GSMRZ1 handler.log601
-rw-r--r--For Weekly Test/tricode/Landline handler.log508
-rwxr-xr-xFor Weekly Test/tricode/LogFileClass.py21
-rw-r--r--For Weekly Test/tricode/LogFileClass.pycbin0 -> 1509 bytes
-rwxr-xr-xFor Weekly Test/tricode/PingClass.py28
-rw-r--r--For Weekly Test/tricode/PingClass.pycbin0 -> 1263 bytes
-rw-r--r--For Weekly Test/tricode/SIP handler.log3225
-rwxr-xr-xFor Weekly Test/tricode/SIPHandler.py252
-rwxr-xr-xFor Weekly Test/tricode/SSHTunnelBoxClass.py45
-rw-r--r--For Weekly Test/tricode/SSHTunnelBoxClass.pycbin0 -> 1835 bytes
-rwxr-xr-xFor Weekly Test/tricode/SSHTunnelClass.py47
-rwxr-xr-xFor Weekly Test/tricode/ServerClass.py152
-rw-r--r--For Weekly Test/tricode/ServerClass.pycbin0 -> 4596 bytes
-rwxr-xr-xFor Weekly Test/tricode/ServerClassSoftware.py162
-rw-r--r--For Weekly Test/tricode/ServerClassSoftware.pycbin0 -> 4802 bytes
-rw-r--r--For Weekly Test/tricode/TestProcessLog.log6668
-rw-r--r--For Weekly Test/tricode/University SIP handler.log595
-rw-r--r--For Weekly Test/tricode/callorigTest.py172
-rw-r--r--For Weekly Test/tricode/class/pBarcode128.class.php184
-rw-r--r--For Weekly Test/tricode/class/pBarcode39.class.php200
-rw-r--r--For Weekly Test/tricode/class/pBubble.class.php283
-rw-r--r--For Weekly Test/tricode/class/pCache.class.php280
-rw-r--r--For Weekly Test/tricode/class/pData.class.php723
-rw-r--r--For Weekly Test/tricode/class/pDraw.class.php5799
-rw-r--r--For Weekly Test/tricode/class/pImage.class.php343
-rw-r--r--For Weekly Test/tricode/class/pIndicator.class.php241
-rw-r--r--For Weekly Test/tricode/class/pPie.class.php1493
-rw-r--r--For Weekly Test/tricode/class/pRadar.class.php669
-rw-r--r--For Weekly Test/tricode/class/pScatter.class.php954
-rw-r--r--For Weekly Test/tricode/class/pSplit.class.php131
-rw-r--r--For Weekly Test/tricode/class/pSpring.class.php868
-rw-r--r--For Weekly Test/tricode/class/pStock.class.php216
-rw-r--r--For Weekly Test/tricode/class/pSurface.class.php315
-rw-r--r--For Weekly Test/tricode/css/Critical.pngbin0 -> 4795 bytes
-rw-r--r--For Weekly Test/tricode/css/Help.pngbin0 -> 4907 bytes
-rw-r--r--For Weekly Test/tricode/css/Info.pngbin0 -> 4600 bytes
-rw-r--r--For Weekly Test/tricode/css/Warning.pngbin0 -> 3467 bytes
-rwxr-xr-xFor Weekly Test/tricode/css/chk_off.pngbin0 -> 655 bytes
-rwxr-xr-xFor Weekly Test/tricode/css/chk_on.pngbin0 -> 537 bytes
-rw-r--r--For Weekly Test/tricode/css/formCSS.css46
-rw-r--r--For Weekly Test/tricode/css/info_rhombus.pngbin0 -> 1816 bytes
-rw-r--r--For Weekly Test/tricode/css/information.pngbin0 -> 2112 bytes
-rw-r--r--For Weekly Test/tricode/css/link.gifbin0 -> 836 bytes
-rw-r--r--For Weekly Test/tricode/css/tableCSS.css146
-rw-r--r--For Weekly Test/tricode/css/tooltip.css33
-rw-r--r--For Weekly Test/tricode/css/visitedLink.gifbin0 -> 838 bytes
-rw-r--r--For Weekly Test/tricode/delayedLoading.js228
-rwxr-xr-xFor Weekly Test/tricode/execute.php30
-rw-r--r--For Weekly Test/tricode/fonts/Bedizen.ttfbin0 -> 42912 bytes
-rw-r--r--For Weekly Test/tricode/fonts/Forgotte.ttfbin0 -> 42148 bytes
-rw-r--r--For Weekly Test/tricode/fonts/GeosansLight.ttfbin0 -> 60072 bytes
-rw-r--r--For Weekly Test/tricode/fonts/MankSans.ttfbin0 -> 58492 bytes
-rw-r--r--For Weekly Test/tricode/fonts/Silkscreen.ttfbin0 -> 16172 bytes
-rw-r--r--For Weekly Test/tricode/fonts/advent_light.ttfbin0 -> 45768 bytes
-rw-r--r--For Weekly Test/tricode/fonts/calibri.ttfbin0 -> 811052 bytes
-rw-r--r--For Weekly Test/tricode/fonts/pf_arma_five.ttfbin0 -> 21936 bytes
-rw-r--r--For Weekly Test/tricode/fonts/verdana.ttfbin0 -> 189144 bytes
-rwxr-xr-xFor Weekly Test/tricode/gsmselftest-website.py480
-rwxr-xr-xFor Weekly Test/tricode/gsmselftest-website2.py461
-rwxr-xr-xFor Weekly Test/tricode/gsmselftest.py783
-rwxr-xr-xFor Weekly Test/tricode/help.txt17
-rw-r--r--For Weekly Test/tricode/icons/blackberry_dunno.pngbin0 -> 1922 bytes
-rw-r--r--For Weekly Test/tricode/icons/blackberry_fail.pngbin0 -> 1954 bytes
-rw-r--r--For Weekly Test/tricode/icons/blackberry_work.pngbin0 -> 1988 bytes
-rw-r--r--For Weekly Test/tricode/icons/box_dunno.pngbin0 -> 1255 bytes
-rw-r--r--For Weekly Test/tricode/icons/box_fail.pngbin0 -> 1407 bytes
-rw-r--r--For Weekly Test/tricode/icons/box_work.pngbin0 -> 1420 bytes
-rw-r--r--For Weekly Test/tricode/icons/server_dunno.pngbin0 -> 1410 bytes
-rw-r--r--For Weekly Test/tricode/icons/server_fail.pngbin0 -> 1497 bytes
-rw-r--r--For Weekly Test/tricode/icons/server_work.pngbin0 -> 1480 bytes
-rw-r--r--For Weekly Test/tricode/icons/sip_dunno.pngbin0 -> 1494 bytes
-rw-r--r--For Weekly Test/tricode/icons/sip_fail.pngbin0 -> 1621 bytes
-rw-r--r--For Weekly Test/tricode/icons/sip_work.pngbin0 -> 1591 bytes
-rw-r--r--For Weekly Test/tricode/icons/telephone_dunno.pngbin0 -> 1798 bytes
-rw-r--r--For Weekly Test/tricode/icons/telephone_fail.pngbin0 -> 1871 bytes
-rw-r--r--For Weekly Test/tricode/icons/telephone_work.pngbin0 -> 1883 bytes
-rw-r--r--For Weekly Test/tricode/icons/uni-network_dunno.pngbin0 -> 3126 bytes
-rw-r--r--For Weekly Test/tricode/icons/uni-network_fail.pngbin0 -> 3202 bytes
-rw-r--r--For Weekly Test/tricode/icons/uni-network_work.pngbin0 -> 3198 bytes
-rwxr-xr-xFor Weekly Test/tricode/initTestClass.py264
-rw-r--r--For Weekly Test/tricode/initTestClass.pycbin0 -> 6538 bytes
-rw-r--r--For Weekly Test/tricode/insertData.php81
-rw-r--r--For Weekly Test/tricode/loader.gifbin0 -> 10819 bytes
-rw-r--r--For Weekly Test/tricode/moocheck.js176
-rw-r--r--For Weekly Test/tricode/mootools.js126
-rw-r--r--For Weekly Test/tricode/mutexFunctions.php36
-rwxr-xr-xFor Weekly Test/tricode/mutexTry.php238
-rw-r--r--For Weekly Test/tricode/networkResult.php307
-rw-r--r--For Weekly Test/tricode/post.php470
-rwxr-xr-xFor Weekly Test/tricode/script.sh1
-rwxr-xr-xFor Weekly Test/tricode/serialTest.py38
-rwxr-xr-xFor Weekly Test/tricode/sshtest.py15
-rw-r--r--For Weekly Test/tricode/startSoftware.py14
-rw-r--r--For Weekly Test/tricode/startTest.php438
-rw-r--r--For Weekly Test/tricode/testCase.php209
-rw-r--r--For Weekly Test/tricode/testingfile.py49
-rwxr-xr-xFor Weekly Test/tricode/trueTableClass.py164
-rw-r--r--For Weekly Test/tricode/trueTableClass.pycbin0 -> 4164 bytes
-rwxr-xr-xFor Weekly Test/tricode/usbDetectClass.py93
-rw-r--r--For Weekly Test/tricode/usbDetectClass.pycbin0 -> 3444 bytes
-rw-r--r--For Weekly Test/tricode/wait.gifbin0 -> 2545 bytes
120 files changed, 32083 insertions, 1 deletions
diff --git a/For Weekly Test/Advance/gsmselftest-website2.py b/For Weekly Test/Advance/gsmselftest-website2.py
index 607d4d2..6f07e29 100755
--- a/For Weekly Test/Advance/gsmselftest-website2.py
+++ b/For Weekly Test/Advance/gsmselftest-website2.py
@@ -7,6 +7,7 @@ import PingClass
import trueTableClass
import initTestClass
import usbDetectClass
+import ServerClassSoftware
from time import sleep
global resultsList
@@ -45,7 +46,8 @@ def initDB(): # function for connection database
db = DbClass.DBMySQLConnection('root', 'randompasswordSQL', 'localhost', 'gsmselftesting')
db.connectDB()
dbStatus = db.connectDB()
-
+ if dbStatus == 1:
+ print 'Lock the mutex: ' + str(db.lockMutex(600))
def initTrueTable(x):
initResult = trueTableClass.trueTable(x)
@@ -403,6 +405,7 @@ else:
global server
global tried
+ initDB() # should put db condition
server = ServerClassSoftware.ServerHandlerSoftware(34500) #define the port
tried = server.openSocket(3)
diff --git a/For Weekly Test/tricode/ClientClass.py b/For Weekly Test/tricode/ClientClass.py
new file mode 100755
index 0000000..46c3b00
--- /dev/null
+++ b/For Weekly Test/tricode/ClientClass.py
@@ -0,0 +1,123 @@
+import socket
+import sys
+import os
+import string
+import signal
+
+class TimeoutException(Exception):
+ pass
+
+class Connection:
+ def __init__(self, h, p):
+ self.host = h
+ self.port = p
+ self.s = None
+ self.connected = 0
+
+ self.debugMode = 0
+
+ def connect(self):
+ self.s = None
+
+ for res in socket.getaddrinfo(self.host, self.port, socket.AF_UNSPEC, socket.SOCK_STREAM):
+ af, socktype, proto, canonname, sa = res
+ try:
+ self.s = socket.socket(af, socktype, proto)
+ self.s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) #this resolves the bug with live packets
+ except socket.error, msg:
+ self.s = None
+ self.connected = 0
+ continue
+ try:
+ self.s.connect(sa)
+ except socket.error, msg:
+ self.s.close()
+ self.connected = 0
+ self.s = None
+ continue
+ break
+ if self.s is None:
+ self.connected = 0
+ return 0 #couldn't connect to the server
+ else:
+ self.connected = 1
+ return 1 #successfully connected to the server
+
+ def sendData(self, data):
+ if self.connected == 1:
+ try:
+ self.s.send(data)
+ return 1
+ except Exception, e:
+ if self.debugMode == 1:
+ import traceback
+ print traceback.format_exc()
+ print e
+ self.connected = 0
+ return 2
+
+ else:
+ return 0
+
+ def receiveData(self, timeout):
+ if self.connected == 1:
+
+ def timeout_handler(signum, frame):
+ raise TimeoutException()
+
+ old_handler = signal.signal(signal.SIGALRM, timeout_handler)
+ signal.alarm(timeout) #start the timeout alarm, for timeout seconds
+ try:
+ data = self.s.recv(1024)
+
+ #stop the timeout function
+ signal.signal(signal.SIGALRM, old_handler)
+ signal.alarm(0)
+
+ return data
+
+
+ except TimeoutException:
+ #timeout happened
+ signal.signal(signal.SIGALRM, old_handler)
+ signal.alarm(0)
+ return 'TIMEOUT'
+
+ except Exception, e:
+
+ signal.signal(signal.SIGALRM, old_handler)
+ signal.alarm(0)
+
+ error = str(e)
+ if self.debugMode == 1:
+ import traceback
+ print traceback.format_exc()
+ print e
+ self.connected = 0
+ if error[0:11] == '[Errno 104]':
+ return 3 #the other side reset the connection,[Errno 104] Connection reset by peer
+
+ return 2
+ else:
+ return 0
+
+ def closeConnection(self):
+ if self.connected == 1:
+ try:
+ self.connected = 0
+ SHUT_RDWR = 2
+ self.s.shutdown(SHUT_RDWR)
+ self.s.close()
+ return 1
+ except Exception, e:
+ self.connected = 0
+ error = str(e)
+ if self.debugMode == 1:
+ import traceback
+ print traceback.format_exc()
+ print e
+ if error[0:11] == '[Errno 107]':
+ return 3 #the other side closed the connection before us, [Errno 107] Transport endpoint is not connected
+ return 2
+ else:
+ return 0
diff --git a/For Weekly Test/tricode/ClientClass.pyc b/For Weekly Test/tricode/ClientClass.pyc
new file mode 100644
index 0000000..7a6dfbc
--- /dev/null
+++ b/For Weekly Test/tricode/ClientClass.pyc
Binary files differ
diff --git a/For Weekly Test/tricode/ControllerClass.py b/For Weekly Test/tricode/ControllerClass.py
new file mode 100755
index 0000000..6e1de89
--- /dev/null
+++ b/For Weekly Test/tricode/ControllerClass.py
@@ -0,0 +1,231 @@
+import sys
+import os
+import subprocess
+import SSHTunnelBoxClass
+import ClientClass
+import random
+
+import LogFileClass
+logger = LogFileClass.Logging('TestProcessLog.log')
+
+from time import sleep
+
+
+class doTheTest:
+
+ def __init__(self, callFrom, callPortName, accCaller, callTo, destPortName, destNo, accDest):
+
+ self.callFrom = callFrom
+ self.dest = callTo
+ self.destNo = destNo
+ self.accDest = accDest
+ self.accCaller = accCaller
+ self.callPortName = callPortName
+ self.destPortName = destPortName
+ self.portCaller = None
+ self.portDest = None
+ self.resultCaller = None
+ self.resultDest = None
+ self.testResult = None
+
+ def FuncTest(self):
+
+ logger.logEvent('')
+
+ self.initCaller()
+
+ if self.callFrom =="GSMRZ3" or self.callFrom =="GSMRZ2": # wait until ssh connection establish
+ sleep(5)
+ else:
+ sleep(2)
+ self.callerGreeting()
+
+ if self.connected == 'OK':
+
+ self.caller.sendData('CALLER|'+self.destNo)
+ callerHandler = self.caller.receiveData(10)
+
+ if callerHandler == "CALLER READY":
+ logger.logEvent('Caller handler : Ready')
+
+ self.initReceiver()
+ if self.dest =="GSMRZ3" or self.dest =="GSMRZ2": # wait until ssh connection establish
+ sleep(5)
+ else:
+ sleep(2)
+ self.receiverGreeting()
+
+ if self.connected == 'OK':
+
+ self.receiver.sendData('RECEIVER')
+ destHandler = self.receiver.receiveData(10)
+
+ if destHandler == 'RECEIVER READY':
+ logger.logEvent('Receiver handler : Ready')
+
+ self.startCall()
+ self.waitingFeedback()
+
+ else:
+ self.testResult = 604
+ logger.logEvent('604 General Handler Error: Destination handler no respond timeout')
+ self.caller.sendData('TERMINATE CONNECTION')
+ self.receiver.closeConnection()
+
+ else:
+ logger.logEvent('998 General Handler Error: Could not connect Destination handler')
+ self.testResult = 998
+ self.caller.sendData('TERMINATE CONNECTION')
+ self.caller.closeConnection()
+ self.initCancelTest()
+ else:
+ self.testResult = 605
+ logger.logEvent('605 General Handler Error: caller handler no respond timeout')
+
+ self.caller.sendData('TERMINATE CONNECTION')
+ self.caller.closeConnection()
+ self.initCancelTest()
+ else:
+ self.testResult = 999
+ logger.logEvent('999 General Handler Error: Could not connect to Caller handler')
+
+
+ def initCancelTest(self):
+ #close SSH connection when using gsmBox and destination doesnt respond. to make sure SSH connection are terminate
+ if self.callFrom[0:5] == 'GSMRZ':
+ if self.callFrom != 'GSMRZ1':
+ # close SSH tunneling
+ self.boxCaller.killTunneling()
+
+ # waiting results state
+ def waitingFeedback(self):
+ logger.logEvent('Waiting Feedback')
+ self.resultDest = self.receiver.receiveData(15)
+ self.resultCaller = self.caller.receiveData(15)
+ #print 'result '+self.resultCaller+'--'+self.resultDest
+ if self.resultCaller <> 'CALL OK' or self.resultDest <> 'CALL OK':
+
+ logger.logEvent('Test Failed')
+ self.testResult = 486
+ self.initTerminate()
+
+ else:
+ logger.logEvent('Test Succeed')
+ self.testResult = 200
+ self.initTerminate()
+
+ #send start call message to caller
+ def startCall(self):
+ logger.logEvent('Start Call')
+ self.receiver.sendData('RECEIVE START')
+ self.caller.sendData('CALL START')
+
+ def initAccount(self, account):
+
+ accConf = account
+ self.username = accConf[0:accConf.find(':')]
+
+ line = accConf[accConf.find(':')+1:]
+ self.password = line[0:line.find(':')]
+
+ newLine = line[line.find(':')+1:]
+ self.server = newLine[0:newLine.find(':')]
+
+ # define the caller configuration such as port name and port caller.
+ def initCaller(self):
+ logger.logEvent('init Caller')
+ logger.logEvent(self.callFrom)
+ self.portCaller = random.randint(30000,60000)
+
+ if self.callFrom[0:4] == 'GSMR':
+ if self.callFrom =="GSMRZ1":
+ self.initGSM(self.portCaller, self.callPortName, self.callFrom)
+ else:
+ self.initAccount(self.accCaller)
+ #open SSH tunneling
+ self.boxCaller = SSHTunnelBoxClass.SSHTunneling(self.portCaller, 50008, self.server, self.username, self.password)
+ self.boxCaller.startTunneling()
+
+
+ elif self.callFrom[0:4] == 'GSME':
+ self.initGSM(self.portCaller, self.callPortName, self.callFrom)
+
+ else:
+ subprocess.Popen(args=["gnome-terminal", '--command=python SIPHandler.py '+self.accCaller+ ' ' +str(self.portCaller)])
+
+ # define the destination configuration such as port name and port caller.
+ def initReceiver(self):
+ logger.logEvent('init Receiver')
+ logger.logEvent(self.dest)
+ self.portDest = random.randint(30000,60000)
+
+ if self.dest[0:4] == 'GSMR':
+ if self.dest =="GSMRZ1":
+ self.initGSM(self.portDest, self.destPortName, self.dest)
+ else:
+ self.initAccount(self.accDest)
+ #open SSH tunneling
+ self.boxDest = SSHTunnelBoxClass.SSHTunneling(self.portDest, 50008, self.server, self.username, self.password)
+ self.boxDest.startTunneling()
+
+ elif self.dest[0:4] == 'GSME':
+ self.initGSM(self.portDest, self.destPortName, self.dest)
+
+ else:
+ self.portDest = 50100
+ subprocess.Popen(args=['gnome-terminal', '--command=python SIPHandler.py '+self.accDest+ ' ' +str(self.portDest)])
+
+ # send terminate message to Handlers
+ def initTerminate(self):
+ self.caller.sendData('TERMINATE CONNECTION')
+ self.receiver.sendData('TERMINATE CONNECTION')
+ if self.callFrom[0:5] == 'GSMRZ':
+ if self.callFrom != 'GSMRZ1':
+ # close SSH tunneling
+ self.boxCaller.killTunneling()
+ if self.dest[0:5] == 'GSMRZ':
+ if self.dest != 'GSMRZ1':
+ # close SSH tunneling
+ self.boxDest.killTunneling()
+ self.receiver.closeConnection()
+ self.caller.closeConnection()
+
+ def callerGreeting(self): # send greeting message to the caller handler
+ self.connected = None
+ #open connection to the Handler
+ self.caller = ClientClass.Connection('localhost',self.portCaller)
+ self.caller.connect()
+
+ if self.caller.connected == 1:
+ logger.logEvent('Connected to Caller Handler')
+ self.caller.sendData('HELLO HANDLER')
+ if self.caller.receiveData(30) == 'HELLO CONTROLLER':
+ logger.logEvent('Caller Handler respond')
+ self.connected = 'OK'
+ else:
+ logger.logEvent('Cannt connect to Caller')
+ self.connected = 'NOT OK'
+
+ def receiverGreeting(self): # send greeting message to the destination handler
+ self.connected = None
+ #open connection to the Handler
+ self.receiver = ClientClass.Connection('localhost', self.portDest)
+ self.receiver.connect()
+
+ if self.receiver.connected == 1:
+ logger.logEvent('Connected to Receiver Handler')
+ self.receiver.sendData('HELLO HANDLER')
+ if self.receiver.receiveData(30) == 'HELLO CONTROLLER':
+ logger.logEvent('Receiver Handler respond')
+ self.connected = 'OK'
+ else:
+ logger.logEvent('Cannt connect to Receiver')
+ self.connected = 'NOT OK'
+
+ def initGSM(self, portCommunication, portDevice, handler):
+ #open GSM Handler
+ subprocess.Popen(args=["gnome-terminal", '--command=python GSMHandler.py '+str(portCommunication)+ ' ' +str(portDevice)+' '+str(handler)])
+
+
+
+
diff --git a/For Weekly Test/tricode/ControllerClass.pyc b/For Weekly Test/tricode/ControllerClass.pyc
new file mode 100644
index 0000000..095761f
--- /dev/null
+++ b/For Weekly Test/tricode/ControllerClass.pyc
Binary files differ
diff --git a/For Weekly Test/tricode/DbClass.py b/For Weekly Test/tricode/DbClass.py
new file mode 100755
index 0000000..8cde4e4
--- /dev/null
+++ b/For Weekly Test/tricode/DbClass.py
@@ -0,0 +1,322 @@
+import MySQLdb
+import string
+
+class DBMySQLConnection:
+ def __init__(self, username, password, host, dbname):
+ #initialize at the start all the user parameters
+ self.usern = username
+ self.passw = password
+ self.host = host
+ self.db = dbname
+ self.connectionCreated = 0
+ self.tasksList = list()
+ self.callerLists = list()
+ self.errCode = None
+ self.deviceUpdate = None
+ self.gsmRZList = None
+ self.gsmExtList = None
+ self.sipList = None
+ self.lockSet = 0
+ global debugMode
+ debugMode = 0
+
+ def connectDB(self):
+ try:
+ #try the connection
+ self.datBaseConn=MySQLdb.connect(self.host,self.usern, self.passw,self.db)
+ self.datBaseConn.paramstyle = 'format'
+ self.cur = self.datBaseConn.cursor() #make the cursor, used for sending queries
+ self.connectionCreated = 1 #use it as an indicator that the connection was created
+ return 1
+
+ except MySQLdb.Error, e:
+ #if we have an error then try to catch it
+ error=str(e)
+ if error[1:5] == '1045':
+ #wrong username or password
+ return 0
+ elif error[1:5] == '2002':
+ #can't connect to mysql, mysql shutdown or wrong host
+ return 2
+ else:
+ if debugMode == 1:
+ print error
+ return 3
+
+ def closeDBConn(self):
+ #close the connection to the database here
+ if self.connectionCreated == 1:
+ try:
+ #close the cursor and then the connection to the DB
+ self.cur.close()
+ self.datBaseConn.close()
+ return 1
+ except MySQLdb.Error, e:
+ #in case of an error
+ if debugMode == 1:
+ error = str(e)
+ print error
+ return 3
+ else:
+ #I never really had a connection
+ return 0
+
+ def anyTasksToDo(self):
+ #see are there any jobs to be executed and make a list out of it
+ if self.connectionCreated == 1:
+ try:
+ self.cur.execute("SELECT * FROM TempTaskTable")
+ output = self.cur.fetchall() #get the mysql response
+ #parse the output from the mysql by creating a list
+ #with lists where each attribue(column) gets independent
+ #element of the list
+ for record in output:
+ columns = list()
+ for entry in record:
+ columns.append(str(entry))
+ #columns.append(str(0))
+ self.tasksList.append(columns)
+
+ if not self.tasksList:
+ return 0
+ else:
+ return 1
+ except MySQLdb.Error, e:
+ error = str(e)
+ if error[1:5] == '1146':
+ return 2 #the table doesn't exist
+ if debugMode == 1:
+ print str(e)
+ return 3
+ else:
+ return 0
+
+ def cleanTasksList(self):
+ if self.connectionCreated == 1:
+ del self.tasksList[:]
+ return 1
+ else:
+ return 0
+
+
+ def deviceAddress(self,deviceName):
+ if self.connectionCreated == 1:
+ try:
+ successful = self.cur.execute("SELECT `portName`,`number`, `username`, `password`, `server` FROM DeviceAddressTable where `deviceName`=%s", deviceName)
+ output = self.cur.fetchall()
+ deviceAddr = ''
+ for record in output:
+ columns = list()
+ for entry in record:
+ columns.append(str(entry))
+ deviceAddr = columns
+
+ return deviceAddr
+ except MySQLdb.Error, e:
+ error = str(e)
+ if error[1:5] == '1146':
+ return 2 #the table doesn't exist
+ if debugMode == 1:
+ print str(e)
+ return 3 #some error happened 07667929147--Fitri
+ else:
+ return 0 #I am not connected
+ def deviceList(self): # taking all device list and put it in the list
+ deviceLists = list()
+ if self.connectionCreated == 1:
+ try:
+ tuple = self.cur.execute("SELECT `deviceName` FROM DeviceAddressTable")
+ output = self.cur.fetchall()
+
+ for record in output:
+ columns = list()
+ for entry in record:
+ columns.append(str(entry))
+ deviceLists.append(columns)
+ return deviceLists
+
+#return deviceAddr
+ except MySQLdb.Error, e:
+ error = str(e)
+ if error[1:5] == '1146':
+ return 2 #the table doesn't exist
+ if debugMode == 1:
+ print str(e)
+ return 3 #some error happened
+ else:
+ print 'not conn'
+ return 0 #I am not connected
+
+ def updateGSMDevice(self, deviceName, newPortName, newNumber):
+ if self.connectionCreated == 1:
+ try:
+ stmt = "UPDATE DeviceAddressTable SET portName = '"+ newPortName + "', number = '"+ newNumber+ "' WHERE deviceName = '" + deviceName+ "'"
+ self.cur.execute(stmt)
+
+ except MySQLdb.Error, e:
+ if debugMode == 1:
+ print str(e)
+ return 3
+ else:
+ return 0
+
+ def updatePingResult(self, taskNo, sipServer, sipGate, unisip, gsmBox1, gsmBox2):
+ if self.connectionCreated == 1:
+ try:
+ successful = self.cur.execute("UPDATE PingResultTable SET sipServer=%i, sipGate=%i, unisip=%i, gsmBox1=%i, gsmBox2=%i WHERE taskNo=%i"%(int(sipServer), int(sipGate), int(unisip), int(gsmBox1), int(gsmBox2), int(taskNo)))
+ output = self.cur.fetchone()
+
+ if debugMode == 1:
+ print output
+ if successful == 0:
+ return 1 #ping table updated
+ else:
+ return 4 #the taskNo didn't exist
+
+
+ except MySQLdb.Error, e:
+ if debugMode == 1:
+ print str(e)
+ return 3
+ else:
+ return 0
+
+ def deleteTempTask(self, taskID):
+ if self.connectionCreated == 1:
+ try:
+ successful = self.cur.execute("DELETE FROM TempTaskTable WHERE taskID=%i"%(int(taskID)))
+ output = self.cur.fetchone()
+
+ if debugMode == 1:
+ print output
+
+ if successful == 1:
+ return 1 #deleted it
+ else:
+ return 4 #that taskID didn't exist or something else
+ except MySQLdb.Error, e:
+ if debugMode == 1:
+ print str(e)
+ return 3
+
+ else:
+ return 0
+
+ def addResult(self, taskID, result):
+ if self.connectionCreated == 1:
+ try:
+ successful = self.cur.execute("INSERT INTO ResultTable(taskID, result) VALUES ('%i', '%i')"%(int(taskID), int(result)))
+ output = self.cur.fetchone()
+
+ if debugMode == 1:
+ print output
+ if successful == 1:
+ return 1 #successfully added the result
+ else:
+ return 4 #hmmm
+ except MySQLdb.Error, e:
+ error = str(e)
+ if error[1:5] == '1062':
+ return 2 #duplicate entry for the key
+ if debugMode == 1:
+ print str(e)
+ return 3
+ else:
+ return 0
+
+
+ def errorCode(self,code):
+ if self.connectionCreated == 1:
+ try:
+ successful = self.cur.execute("SELECT description FROM ErrorCodeTable where `errorcode`=%s", code)
+ data = self.cur.fetchone()
+ self.errCode = data[0]
+ return self.errCode
+
+ except MySQLdb.Error, e:
+ error = str(e)
+ if error[1:5] == '1146':
+ return 2 #the table doesn't exist
+ if debugMode == 1:
+ print str(e)
+ return 3 #some error happened
+ else:
+ return 0 #I am not connected
+
+ def lockMutex(self, seconds):
+ if self.connectionCreated == 1:
+ try:
+ successful = self.cur.execute("SELECT IS_FREE_LOCK('SoftwareStarted')")
+ output = self.cur.fetchone()
+ if output[0] == 1:
+ #resource is free which means software is not started yet
+ successful = self.cur.execute("SELECT GET_LOCK('SoftwareStarted', %i)"%(int(seconds)))
+
+ output1 = self.cur.fetchone()
+ if output1[0] == 1:
+ #I got the lock now
+ self.lockSet = 1
+ return 1
+ elif output1[0] == 0:
+ return 7 #if the attempt timed out (for example, because another client has previously locked the name)
+ else:
+ return 6 # if an error occurred (such as running out of memory or the thread was killed with
+ elif output[0] ==0:
+ return 4 #software is already running and somebody has allocated the mutex
+ else:
+ #means some not so good bug
+ return 5 # if an error occurs (such as an incorrect argument).
+ except MySQLdb.Error, e:
+ error = str(e)
+ if error[1:5] == '1062':
+ return 2 #duplicate entry for the key
+ if debugMode == 1:
+ print str(e)
+ return 3
+ else:
+ return 0
+
+ def releaseMutex(self):
+ if self.connectionCreated == 1:
+ try:
+ if self.lockSet == 1:
+ successful = self.cur.execute("SELECT IS_FREE_LOCK('SoftwareStarted')")
+ output = self.cur.fetchone()
+ if output[0] == 1:
+ #the lock seems to be free
+ self.lockSet = 0
+ return 4
+
+ elif output[0] == 0:
+
+ #try to release the lock
+ successful = self.cur.execute("SELECT RELEASE_LOCK('SoftwareStarted')")
+ output1 = self.cur.fetchone()
+ self.lockSet = 0
+ if output1[0] == 1:
+ #the lock was released successfully
+ return 1
+
+ elif output1[0] == 0:
+ # if the lock was not established by this thread (in which case the lock is not released)
+ return 5
+ else:
+ # and NULL if the named lock did not exist. The lock does not exist if it was never obtained by a call to GET_LOCK() or if it has previously been released.
+ return 6
+ else:
+ #some serious problem
+ #and NULL if an error occurs (such as an incorrect argument).
+ return 5
+
+ else:
+ return 7 #the lock wasn't set
+
+ except MySQLdb.Error, e:
+ error = str(e)
+ if error[1:5] == '1062':
+ return 2 #duplicate entry for the key
+ if debugMode == 1:
+ print str(e)
+ return 3
+ else:
+ return 0
diff --git a/For Weekly Test/tricode/DbClass.pyc b/For Weekly Test/tricode/DbClass.pyc
new file mode 100644
index 0000000..68ddd16
--- /dev/null
+++ b/For Weekly Test/tricode/DbClass.pyc
Binary files differ
diff --git a/For Weekly Test/tricode/GSM EPlus handler.log b/For Weekly Test/tricode/GSM EPlus handler.log
new file mode 100755
index 0000000..7997504
--- /dev/null
+++ b/For Weekly Test/tricode/GSM EPlus handler.log
@@ -0,0 +1,40 @@
+
+
+------------------STARTED THE LOGGING 2011-09-09 12:48:27.264683 ------------------
+On: 2011-09-09 12:48:27.265058 Event: LISTEN ON PORT: 50013
+On: 2011-09-09 12:48:28.558466 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 49184)
+On: 2011-09-09 12:48:28.558826 Event: TALK INITIALIZATION SENT
+On: 2011-09-09 12:48:28.559020 Event: RECEIVER READY SENT
+On: 2011-09-09 12:48:41.101556 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-09 12:59:06.848402 ------------------
+On: 2011-09-09 12:59:06.848758 Event: LISTEN ON PORT: 50013
+On: 2011-09-09 12:59:08.158183 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 57214)
+On: 2011-09-09 12:59:08.158555 Event: TALK INITIALIZATION SENT
+On: 2011-09-09 12:59:08.158752 Event: RECEIVER READY SENT
+On: 2011-09-09 12:59:19.917552 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-09 13:06:13.387544 ------------------
+On: 2011-09-09 13:06:13.387893 Event: LISTEN ON PORT: 50013
+On: 2011-09-09 13:06:14.689750 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 46713)
+On: 2011-09-09 13:06:14.690101 Event: TALK INITIALIZATION SENT
+On: 2011-09-09 13:06:14.690286 Event: RECEIVER READY SENT
+On: 2011-09-09 13:06:27.129506 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-09 16:26:32.215390 ------------------
+On: 2011-09-09 16:26:32.215752 Event: LISTEN ON PORT: 50013
+On: 2011-09-09 16:26:33.562369 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 42523)
+On: 2011-09-09 16:26:33.562737 Event: TALK INITIALIZATION SENT
+On: 2011-09-09 16:26:33.562934 Event: RECEIVER READY SENT
+On: 2011-09-09 16:26:45.033768 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-12 14:40:55.226813 ------------------
+On: 2011-09-12 14:40:55.227014 Event: LISTEN ON PORT: 50013
+On: 2011-09-12 14:40:57.081675 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 43518)
+On: 2011-09-12 14:40:57.081881 Event: TALK INITIALIZATION SENT
+On: 2011-09-12 14:40:57.082085 Event: RECEIVER READY SENT
+On: 2011-09-12 14:41:08.595861 Event: RECEIVE STATUS REPORTED
diff --git a/For Weekly Test/tricode/GSM O2 handler.log b/For Weekly Test/tricode/GSM O2 handler.log
new file mode 100755
index 0000000..84433a8
--- /dev/null
+++ b/For Weekly Test/tricode/GSM O2 handler.log
@@ -0,0 +1,112 @@
+
+
+------------------STARTED THE LOGGING 2011-09-02 13:19:16.340815 ------------------
+On: 2011-09-02 13:19:16.341186 Event: LISTEN ON PORT: 50010
+On: 2011-09-02 13:19:17.518510 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 58024)
+On: 2011-09-02 13:19:17.518877 Event: TALK INITIALIZATION SENT
+On: 2011-09-02 13:19:17.519088 Event: RECEIVER READY SENT
+On: 2011-09-02 13:19:52.565859 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-02 13:20:12.787827 ------------------
+On: 2011-09-02 13:20:12.788178 Event: LISTEN ON PORT: 50010
+On: 2011-09-02 13:20:14.086507 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 58028)
+On: 2011-09-02 13:20:14.086878 Event: TALK INITIALIZATION SENT
+On: 2011-09-02 13:20:14.087087 Event: RECEIVER READY SENT
+On: 2011-09-02 13:20:49.131352 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-02 13:21:04.327838 ------------------
+On: 2011-09-02 13:21:04.328190 Event: LISTEN ON PORT: 50010
+On: 2011-09-02 13:21:05.622153 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 58032)
+On: 2011-09-02 13:21:05.622509 Event: TALK INITIALIZATION SENT
+On: 2011-09-02 13:21:05.622716 Event: RECEIVER READY SENT
+On: 2011-09-02 13:21:40.669855 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-02 13:29:20.540569 ------------------
+On: 2011-09-02 13:29:20.540925 Event: LISTEN ON PORT: 50010
+On: 2011-09-02 13:29:21.822541 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 35657)
+On: 2011-09-02 13:29:21.823061 Event: TALK INITIALIZATION SENT
+On: 2011-09-02 13:29:21.823284 Event: RECEIVER READY SENT
+On: 2011-09-02 13:29:56.893863 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-02 13:46:00.662353 ------------------
+On: 2011-09-02 13:46:00.662704 Event: LISTEN ON PORT: 50010
+On: 2011-09-02 13:46:01.954462 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 50620)
+On: 2011-09-02 13:46:01.954832 Event: TALK INITIALIZATION SENT
+On: 2011-09-02 13:46:01.955047 Event: RECEIVER READY SENT
+On: 2011-09-02 13:46:37.001865 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-02 13:49:55.948391 ------------------
+On: 2011-09-02 13:49:55.948742 Event: LISTEN ON PORT: 50010
+On: 2011-09-02 13:49:57.222503 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 34857)
+On: 2011-09-02 13:49:57.222862 Event: TALK INITIALIZATION SENT
+On: 2011-09-02 13:49:57.223068 Event: RECEIVER READY SENT
+On: 2011-09-02 13:50:32.269865 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-02 13:55:04.613859 ------------------
+On: 2011-09-02 13:55:04.614276 Event: LISTEN ON PORT: 50010
+On: 2011-09-02 13:55:05.900791 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 49252)
+On: 2011-09-02 13:55:05.901155 Event: TALK INITIALIZATION SENT
+On: 2011-09-02 13:55:05.901360 Event: RECEIVER READY SENT
+On: 2011-09-02 13:55:40.945864 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-09 12:01:08.553238 ------------------
+On: 2011-09-09 12:01:08.553690 Event: LISTEN ON PORT: 50010
+On: 2011-09-09 12:01:09.633472 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 37013)
+On: 2011-09-09 12:01:09.633839 Event: TALK INITIALIZATION SENT
+On: 2011-09-09 12:01:09.634040 Event: RECEIVER READY SENT
+On: 2011-09-09 12:01:20.697548 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-09 12:47:38.800491 ------------------
+On: 2011-09-09 12:47:38.800847 Event: LISTEN ON PORT: 50010
+On: 2011-09-09 12:47:40.099170 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 38025)
+On: 2011-09-09 12:47:40.099532 Event: TALK INITIALIZATION SENT
+On: 2011-09-09 12:47:40.099759 Event: RECEIVER READY SENT
+On: 2011-09-09 12:47:52.645510 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-09 12:51:04.852997 ------------------
+On: 2011-09-09 12:51:04.853352 Event: LISTEN ON PORT: 50010
+On: 2011-09-09 12:51:05.992284 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 52593)
+On: 2011-09-09 12:51:05.992645 Event: TALK INITIALIZATION SENT
+On: 2011-09-09 12:51:05.992845 Event: CALLER READY SENT
+On: 2011-09-09 12:51:18.173129 Event: CALLER STATUS SENT
+
+
+------------------STARTED THE LOGGING 2011-09-09 12:58:45.031428 ------------------
+On: 2011-09-09 12:58:45.031786 Event: LISTEN ON PORT: 50010
+On: 2011-09-09 12:58:46.137551 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 50390)
+On: 2011-09-09 12:58:46.137917 Event: TALK INITIALIZATION SENT
+On: 2011-09-09 12:58:46.138115 Event: RECEIVER READY SENT
+On: 2011-09-09 12:58:57.525504 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-09 13:05:28.675031 ------------------
+On: 2011-09-09 13:05:28.675384 Event: LISTEN ON PORT: 50010
+On: 2011-09-09 13:05:29.989932 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 58734)
+On: 2011-09-09 13:05:29.990321 Event: TALK INITIALIZATION SENT
+On: 2011-09-09 13:05:29.990516 Event: RECEIVER READY SENT
+On: 2011-09-09 13:05:41.029529 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-09 16:25:14.182184 ------------------
+On: 2011-09-09 16:25:14.182544 Event: LISTEN ON PORT: 50010
+On: 2011-09-09 16:25:15.512986 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 41638)
+On: 2011-09-09 16:25:15.513359 Event: TALK INITIALIZATION SENT
+On: 2011-09-09 16:25:15.513559 Event: RECEIVER READY SENT
+On: 2011-09-09 16:25:50.557079 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-12 14:43:09.337867 ------------------
+On: 2011-09-12 14:43:09.338081 Event: LISTEN ON PORT: 50010
+On: 2011-09-12 14:43:11.180846 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 60058)
+On: 2011-09-12 14:43:11.181472 Event: TALK INITIALIZATION SENT
+On: 2011-09-12 14:43:11.181850 Event: RECEIVER READY SENT
+On: 2011-09-12 14:43:46.231884 Event: RECEIVE STATUS REPORTED
diff --git a/For Weekly Test/tricode/GSM RZ1 handler.log b/For Weekly Test/tricode/GSM RZ1 handler.log
new file mode 100755
index 0000000..73390d2
--- /dev/null
+++ b/For Weekly Test/tricode/GSM RZ1 handler.log
@@ -0,0 +1,445 @@
+
+
+------------------STARTED THE LOGGING 2011-09-09 12:09:04.252668 ------------------
+On: 2011-09-09 12:09:04.253031 Event: LISTEN ON PORT: 50007
+On: 2011-09-09 12:09:05.548461 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 56426)
+On: 2011-09-09 12:09:05.548828 Event: TALK INITIALIZATION SENT
+On: 2011-09-09 12:09:05.549026 Event: RECEIVER READY SENT
+On: 2011-09-09 12:09:10.346080 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-09 12:49:14.607291 ------------------
+On: 2011-09-09 12:49:14.607750 Event: LISTEN ON PORT: 50007
+On: 2011-09-09 12:49:15.835788 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 56351)
+On: 2011-09-09 12:49:15.836139 Event: TALK INITIALIZATION SENT
+On: 2011-09-09 12:49:15.836444 Event: RECEIVER READY SENT
+On: 2011-09-09 12:49:20.734057 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-09 12:49:58.309936 ------------------
+On: 2011-09-09 12:49:58.310290 Event: LISTEN ON PORT: 50007
+On: 2011-09-09 12:49:59.620358 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 56362)
+On: 2011-09-09 12:49:59.620713 Event: TALK INITIALIZATION SENT
+On: 2011-09-09 12:49:59.620910 Event: CALLER READY SENT
+On: 2011-09-09 12:50:07.098264 Event: CALLER STATUS SENT
+
+
+------------------STARTED THE LOGGING 2011-09-09 12:50:12.795225 ------------------
+On: 2011-09-09 12:50:12.795583 Event: LISTEN ON PORT: 50007
+On: 2011-09-09 12:50:14.118855 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 56366)
+On: 2011-09-09 12:50:14.119213 Event: TALK INITIALIZATION SENT
+On: 2011-09-09 12:50:14.119408 Event: CALLER READY SENT
+On: 2011-09-09 12:50:19.922092 Event: CALLER STATUS SENT
+
+
+------------------STARTED THE LOGGING 2011-09-09 12:50:27.671994 ------------------
+On: 2011-09-09 12:50:27.672351 Event: LISTEN ON PORT: 50007
+On: 2011-09-09 12:50:28.975329 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 56372)
+On: 2011-09-09 12:50:28.975692 Event: TALK INITIALIZATION SENT
+On: 2011-09-09 12:50:28.975891 Event: RECEIVER READY SENT
+On: 2011-09-09 12:51:04.023944 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-09 12:51:06.711538 ------------------
+On: 2011-09-09 12:51:06.711896 Event: LISTEN ON PORT: 50007
+On: 2011-09-09 12:51:07.998006 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 56376)
+On: 2011-09-09 12:51:07.998560 Event: TALK INITIALIZATION SENT
+On: 2011-09-09 12:51:07.998802 Event: RECEIVER READY SENT
+On: 2011-09-09 12:51:14.901568 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-09 12:51:25.887230 ------------------
+On: 2011-09-09 12:51:25.887589 Event: LISTEN ON PORT: 50007
+On: 2011-09-09 12:51:27.186301 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 56380)
+On: 2011-09-09 12:51:27.186663 Event: TALK INITIALIZATION SENT
+On: 2011-09-09 12:51:27.186859 Event: RECEIVER READY SENT
+On: 2011-09-09 12:51:34.905569 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-09 13:06:58.642536 ------------------
+On: 2011-09-09 13:06:58.642891 Event: LISTEN ON PORT: 50007
+On: 2011-09-09 13:06:59.926611 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 55773)
+On: 2011-09-09 13:06:59.926965 Event: TALK INITIALIZATION SENT
+On: 2011-09-09 13:06:59.927150 Event: RECEIVER READY SENT
+On: 2011-09-09 13:07:04.714132 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-09 13:07:42.389809 ------------------
+On: 2011-09-09 13:07:42.390169 Event: LISTEN ON PORT: 50007
+On: 2011-09-09 13:07:43.727870 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 55784)
+On: 2011-09-09 13:07:43.728236 Event: TALK INITIALIZATION SENT
+On: 2011-09-09 13:07:43.728439 Event: CALLER READY SENT
+On: 2011-09-09 13:07:52.374208 Event: CALLER STATUS SENT
+
+
+------------------STARTED THE LOGGING 2011-09-09 13:07:58.054747 ------------------
+On: 2011-09-09 13:07:58.055099 Event: LISTEN ON PORT: 50007
+On: 2011-09-09 13:07:59.392133 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 55789)
+On: 2011-09-09 13:07:59.392493 Event: TALK INITIALIZATION SENT
+On: 2011-09-09 13:07:59.392689 Event: CALLER READY SENT
+On: 2011-09-09 13:08:04.658096 Event: CALLER STATUS SENT
+
+
+------------------STARTED THE LOGGING 2011-09-09 13:08:12.432386 ------------------
+On: 2011-09-09 13:08:12.432741 Event: LISTEN ON PORT: 50007
+On: 2011-09-09 13:08:13.714138 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 55795)
+On: 2011-09-09 13:08:13.714495 Event: TALK INITIALIZATION SENT
+On: 2011-09-09 13:08:13.714691 Event: RECEIVER READY SENT
+On: 2011-09-09 13:08:21.713585 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-09 16:27:33.320470 ------------------
+On: 2011-09-09 16:27:33.320821 Event: LISTEN ON PORT: 50007
+On: 2011-09-09 16:27:34.665873 Event: $connection established but device not working: ('127.0.0.1', 46371)
+
+
+------------------STARTED THE LOGGING 2011-09-09 16:28:12.758156 ------------------
+On: 2011-09-09 16:28:12.758516 Event: LISTEN ON PORT: 50007
+On: 2011-09-09 16:28:14.140885 Event: $connection established but device not working: ('127.0.0.1', 46381)
+
+
+------------------STARTED THE LOGGING 2011-09-09 16:28:21.843292 ------------------
+On: 2011-09-09 16:28:21.843645 Event: LISTEN ON PORT: 50007
+On: 2011-09-09 16:28:23.189381 Event: $connection established but device not working: ('127.0.0.1', 46385)
+
+
+------------------STARTED THE LOGGING 2011-09-09 21:08:03.739982 ------------------
+On: 2011-09-09 21:08:03.740341 Event: LISTEN ON PORT: 50007
+On: 2011-09-09 21:08:57.457214 Event: $no connection
+
+
+------------------STARTED THE LOGGING 2011-09-11 20:31:40.604286 ------------------
+On: 2011-09-11 20:31:40.604485 Event: LISTEN ON PORT: 50007
+On: 2011-09-11 20:31:42.470822 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 44479)
+On: 2011-09-11 20:31:42.471118 Event: TALK INITIALIZATION SENT
+On: 2011-09-11 20:31:42.471364 Event: RECEIVER READY SENT
+On: 2011-09-11 20:31:47.318892 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-11 20:32:18.769934 ------------------
+On: 2011-09-11 20:32:18.770084 Event: LISTEN ON PORT: 50007
+On: 2011-09-11 20:32:20.621688 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 44487)
+On: 2011-09-11 20:32:20.621780 Event: TALK INITIALIZATION SENT
+On: 2011-09-11 20:32:20.621846 Event: RECEIVER READY SENT
+On: 2011-09-11 20:32:26.154870 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-11 20:35:30.903279 ------------------
+On: 2011-09-11 20:35:30.903427 Event: LISTEN ON PORT: 50007
+On: 2011-09-11 20:35:32.736107 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 37454)
+On: 2011-09-11 20:35:32.736376 Event: TALK INITIALIZATION SENT
+On: 2011-09-11 20:35:32.736586 Event: RECEIVER READY SENT
+On: 2011-09-11 20:35:37.982869 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-11 20:41:54.832964 ------------------
+On: 2011-09-11 20:41:54.833110 Event: LISTEN ON PORT: 50007
+On: 2011-09-11 20:41:56.697828 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 58521)
+On: 2011-09-11 20:41:56.698115 Event: TALK INITIALIZATION SENT
+On: 2011-09-11 20:41:56.698374 Event: RECEIVER READY SENT
+On: 2011-09-11 20:42:02.138861 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-11 20:49:38.859404 ------------------
+On: 2011-09-11 20:49:38.859549 Event: LISTEN ON PORT: 50007
+On: 2011-09-11 20:49:40.711849 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 59578)
+On: 2011-09-11 20:49:40.712111 Event: TALK INITIALIZATION SENT
+On: 2011-09-11 20:49:40.712340 Event: RECEIVER READY SENT
+On: 2011-09-11 20:49:46.566860 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-11 20:51:48.137464 ------------------
+On: 2011-09-11 20:51:48.137600 Event: LISTEN ON PORT: 50007
+On: 2011-09-11 20:51:49.999857 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 59586)
+On: 2011-09-11 20:51:50.000517 Event: TALK INITIALIZATION SENT
+On: 2011-09-11 20:51:50.000950 Event: RECEIVER READY SENT
+On: 2011-09-11 20:51:54.838862 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-12 14:34:12.369592 ------------------
+On: 2011-09-12 14:34:12.369780 Event: LISTEN ON PORT: 50007
+On: 2011-09-12 14:34:14.215731 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 57075)
+On: 2011-09-12 14:34:14.216034 Event: TALK INITIALIZATION SENT
+On: 2011-09-12 14:34:14.216425 Event: RECEIVER READY SENT
+On: 2011-09-12 14:34:19.731872 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-12 14:34:26.897437 ------------------
+On: 2011-09-12 14:34:26.897653 Event: LISTEN ON PORT: 50007
+On: 2011-09-12 14:34:28.757754 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 57077)
+On: 2011-09-12 14:34:28.758024 Event: TALK INITIALIZATION SENT
+On: 2011-09-12 14:34:28.758241 Event: RECEIVER READY SENT
+On: 2011-09-12 14:34:33.871865 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-12 14:36:30.859006 ------------------
+On: 2011-09-12 14:36:30.859141 Event: LISTEN ON PORT: 50007
+On: 2011-09-12 14:36:32.707629 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 45158)
+On: 2011-09-12 14:36:32.708010 Event: TALK INITIALIZATION SENT
+On: 2011-09-12 14:36:32.708271 Event: RECEIVER READY SENT
+On: 2011-09-12 14:36:38.611894 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-12 14:40:53.205353 ------------------
+On: 2011-09-12 14:40:53.205499 Event: LISTEN ON PORT: 50007
+On: 2011-09-12 14:40:55.075920 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 49757)
+On: 2011-09-12 14:40:55.076216 Event: TALK INITIALIZATION SENT
+On: 2011-09-12 14:40:55.076464 Event: CALLER READY SENT
+On: 2011-09-12 14:41:07.847951 Event: CALLER STATUS SENT
+
+
+------------------STARTED THE LOGGING 2011-09-12 14:41:13.772641 ------------------
+On: 2011-09-12 14:41:13.772791 Event: LISTEN ON PORT: 50007
+On: 2011-09-12 14:41:15.609376 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 49771)
+On: 2011-09-12 14:41:15.609466 Event: TALK INITIALIZATION SENT
+On: 2011-09-12 14:41:15.609593 Event: CALLER READY SENT
+On: 2011-09-12 14:41:28.439868 Event: CALLER STATUS SENT
+
+
+------------------STARTED THE LOGGING 2011-09-12 14:42:01.018134 ------------------
+On: 2011-09-12 14:42:01.018284 Event: LISTEN ON PORT: 50007
+On: 2011-09-12 14:42:02.872258 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 49796)
+On: 2011-09-12 14:42:02.872476 Event: TALK INITIALIZATION SENT
+On: 2011-09-12 14:42:02.872611 Event: CALLER READY SENT
+On: 2011-09-12 14:42:16.175900 Event: CALLER STATUS SENT
+
+
+------------------STARTED THE LOGGING 2011-09-12 14:43:07.312211 ------------------
+On: 2011-09-12 14:43:07.312401 Event: LISTEN ON PORT: 50007
+On: 2011-09-12 14:43:09.176761 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 49805)
+On: 2011-09-12 14:43:09.176850 Event: TALK INITIALIZATION SENT
+On: 2011-09-12 14:43:09.176919 Event: CALLER READY SENT
+On: 2011-09-12 14:43:16.643865 Event: CALLER STATUS SENT
+On: 2011-09-12 14:43:26.644063 Event: other appeared
+
+
+------------------STARTED THE LOGGING 2011-09-12 14:43:59.133145 ------------------
+On: 2011-09-12 14:43:59.133347 Event: LISTEN ON PORT: 50007
+On: 2011-09-12 14:44:01.004213 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 49838)
+On: 2011-09-12 14:44:01.004306 Event: TALK INITIALIZATION SENT
+On: 2011-09-12 14:44:01.004376 Event: CALLER READY SENT
+On: 2011-09-12 14:44:13.703866 Event: CALLER STATUS SENT
+
+
+------------------STARTED THE LOGGING 2011-09-12 14:56:55.325808 ------------------
+On: 2011-09-12 14:56:55.325950 Event: LISTEN ON PORT: 50007
+On: 2011-09-12 14:56:57.176660 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 48944)
+On: 2011-09-12 14:56:57.176744 Event: TALK INITIALIZATION SENT
+On: 2011-09-12 14:56:57.176805 Event: RECEIVER READY SENT
+On: 2011-09-12 14:57:02.143879 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-12 14:57:09.298801 ------------------
+On: 2011-09-12 14:57:09.298948 Event: LISTEN ON PORT: 50007
+On: 2011-09-12 14:57:11.164230 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 48947)
+On: 2011-09-12 14:57:11.164541 Event: TALK INITIALIZATION SENT
+On: 2011-09-12 14:57:11.164947 Event: RECEIVER READY SENT
+On: 2011-09-12 14:57:16.499867 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-12 15:01:23.466451 ------------------
+On: 2011-09-12 15:01:23.466659 Event: LISTEN ON PORT: 50007
+On: 2011-09-12 15:01:25.332316 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 41827)
+On: 2011-09-12 15:01:25.332421 Event: TALK INITIALIZATION SENT
+On: 2011-09-12 15:01:25.332502 Event: RECEIVER READY SENT
+On: 2011-09-12 15:01:30.483863 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-12 15:14:56.063288 ------------------
+On: 2011-09-12 15:14:56.063476 Event: LISTEN ON PORT: 50007
+On: 2011-09-12 15:14:57.923208 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 43898)
+On: 2011-09-12 15:14:57.923488 Event: TALK INITIALIZATION SENT
+On: 2011-09-12 15:14:57.923737 Event: RECEIVER READY SENT
+On: 2011-09-12 15:15:03.759896 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-12 15:15:10.907063 ------------------
+On: 2011-09-12 15:15:10.907204 Event: LISTEN ON PORT: 50007
+On: 2011-09-12 15:15:12.776151 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 43900)
+On: 2011-09-12 15:15:12.776358 Event: TALK INITIALIZATION SENT
+On: 2011-09-12 15:15:12.776473 Event: RECEIVER READY SENT
+On: 2011-09-12 15:15:17.859905 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-12 15:15:25.020451 ------------------
+On: 2011-09-12 15:15:25.020668 Event: LISTEN ON PORT: 50007
+On: 2011-09-12 15:15:26.879166 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 43918)
+On: 2011-09-12 15:15:26.879252 Event: TALK INITIALIZATION SENT
+On: 2011-09-12 15:15:26.879313 Event: RECEIVER READY SENT
+On: 2011-09-12 15:15:31.983889 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-12 15:15:39.151966 ------------------
+On: 2011-09-12 15:15:39.152162 Event: LISTEN ON PORT: 50007
+On: 2011-09-12 15:15:41.014279 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 43926)
+On: 2011-09-12 15:15:41.014619 Event: TALK INITIALIZATION SENT
+On: 2011-09-12 15:15:41.014957 Event: RECEIVER READY SENT
+On: 2011-09-12 15:15:46.127870 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-12 15:19:35.668448 ------------------
+On: 2011-09-12 15:19:35.668590 Event: LISTEN ON PORT: 50007
+On: 2011-09-12 15:19:37.524158 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 46144)
+On: 2011-09-12 15:19:37.524361 Event: TALK INITIALIZATION SENT
+On: 2011-09-12 15:19:37.524709 Event: RECEIVER READY SENT
+On: 2011-09-12 15:19:42.659891 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-12 15:26:15.168629 ------------------
+On: 2011-09-12 15:26:15.168820 Event: LISTEN ON PORT: 50007
+On: 2011-09-12 15:26:17.019563 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 58905)
+On: 2011-09-12 15:26:17.019971 Event: TALK INITIALIZATION SENT
+On: 2011-09-12 15:26:17.020260 Event: RECEIVER READY SENT
+On: 2011-09-12 15:26:22.843918 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-12 15:27:38.930946 ------------------
+On: 2011-09-12 15:27:38.931129 Event: LISTEN ON PORT: 50007
+On: 2011-09-12 15:27:40.788517 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 58943)
+On: 2011-09-12 15:27:40.788624 Event: TALK INITIALIZATION SENT
+On: 2011-09-12 15:27:40.788685 Event: RECEIVER READY SENT
+On: 2011-09-12 15:27:46.383896 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-12 15:28:27.223362 ------------------
+On: 2011-09-12 15:28:27.223509 Event: LISTEN ON PORT: 50007
+On: 2011-09-12 15:28:29.089129 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 58952)
+On: 2011-09-12 15:28:29.089276 Event: TALK INITIALIZATION SENT
+On: 2011-09-12 15:28:29.089381 Event: RECEIVER READY SENT
+On: 2011-09-12 15:28:34.667894 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-12 15:32:15.562789 ------------------
+On: 2011-09-12 15:32:15.562925 Event: LISTEN ON PORT: 50007
+On: 2011-09-12 15:32:17.448140 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 54499)
+On: 2011-09-12 15:32:17.448234 Event: TALK INITIALIZATION SENT
+On: 2011-09-12 15:32:17.448299 Event: RECEIVER READY SENT
+On: 2011-09-12 15:32:23.207892 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-12 15:35:10.231404 ------------------
+On: 2011-09-12 15:35:10.231546 Event: LISTEN ON PORT: 50007
+On: 2011-09-12 15:35:12.110089 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 54545)
+On: 2011-09-12 15:35:12.110396 Event: TALK INITIALIZATION SENT
+On: 2011-09-12 15:35:12.110643 Event: RECEIVER READY SENT
+On: 2011-09-12 15:35:17.147894 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-12 15:44:49.454514 ------------------
+On: 2011-09-12 15:44:49.454646 Event: LISTEN ON PORT: 50007
+On: 2011-09-12 15:44:51.312223 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 40859)
+On: 2011-09-12 15:44:51.312332 Event: TALK INITIALIZATION SENT
+On: 2011-09-12 15:44:51.312444 Event: RECEIVER READY SENT
+On: 2011-09-12 15:44:56.207917 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-12 15:45:58.478998 ------------------
+On: 2011-09-12 15:45:58.479175 Event: LISTEN ON PORT: 50007
+On: 2011-09-12 15:46:00.348200 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 35704)
+On: 2011-09-12 15:46:00.348288 Event: TALK INITIALIZATION SENT
+On: 2011-09-12 15:46:00.348402 Event: RECEIVER READY SENT
+On: 2011-09-12 15:46:05.651905 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-12 15:47:40.237784 ------------------
+On: 2011-09-12 15:47:40.237923 Event: LISTEN ON PORT: 50007
+On: 2011-09-12 15:47:42.088635 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 35741)
+On: 2011-09-12 15:47:42.088727 Event: TALK INITIALIZATION SENT
+On: 2011-09-12 15:47:42.088865 Event: RECEIVER READY SENT
+On: 2011-09-12 15:47:47.091885 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-12 15:55:03.395908 ------------------
+On: 2011-09-12 15:55:03.396061 Event: LISTEN ON PORT: 50007
+On: 2011-09-12 15:55:05.261236 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 55348)
+On: 2011-09-12 15:55:05.261516 Event: TALK INITIALIZATION SENT
+On: 2011-09-12 15:55:05.261715 Event: RECEIVER READY SENT
+On: 2011-09-12 15:55:10.551886 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-12 15:57:55.360458 ------------------
+On: 2011-09-12 15:57:55.360590 Event: LISTEN ON PORT: 50007
+On: 2011-09-12 15:57:57.197326 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 33224)
+On: 2011-09-12 15:57:57.197439 Event: TALK INITIALIZATION SENT
+On: 2011-09-12 15:57:57.197511 Event: RECEIVER READY SENT
+On: 2011-09-12 15:58:02.635879 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-12 16:02:33.745309 ------------------
+On: 2011-09-12 16:02:33.745511 Event: LISTEN ON PORT: 50007
+On: 2011-09-12 16:02:35.604235 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 43816)
+On: 2011-09-12 16:02:35.604417 Event: TALK INITIALIZATION SENT
+On: 2011-09-12 16:02:35.604598 Event: RECEIVER READY SENT
+On: 2011-09-12 16:02:41.331887 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-12 16:05:11.726433 ------------------
+On: 2011-09-12 16:05:11.726571 Event: LISTEN ON PORT: 50007
+On: 2011-09-12 16:05:13.603313 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 43849)
+On: 2011-09-12 16:05:13.603771 Event: TALK INITIALIZATION SENT
+On: 2011-09-12 16:05:13.604019 Event: RECEIVER READY SENT
+On: 2011-09-12 16:05:19.495897 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-12 16:08:31.470858 ------------------
+On: 2011-09-12 16:08:31.470998 Event: LISTEN ON PORT: 50007
+On: 2011-09-12 16:08:33.337750 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 39817)
+On: 2011-09-12 16:08:33.337841 Event: TALK INITIALIZATION SENT
+On: 2011-09-12 16:08:33.337910 Event: RECEIVER READY SENT
+On: 2011-09-12 16:08:39.355862 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-12 16:11:34.073728 ------------------
+On: 2011-09-12 16:11:34.073917 Event: LISTEN ON PORT: 50007
+On: 2011-09-12 16:11:35.951587 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 53207)
+On: 2011-09-12 16:11:35.951971 Event: TALK INITIALIZATION SENT
+On: 2011-09-12 16:11:35.952285 Event: RECEIVER READY SENT
+On: 2011-09-12 16:11:41.543962 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-12 16:12:13.028243 ------------------
+On: 2011-09-12 16:12:13.028417 Event: LISTEN ON PORT: 50007
+On: 2011-09-12 16:12:14.905460 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 53219)
+On: 2011-09-12 16:12:14.905667 Event: TALK INITIALIZATION SENT
+On: 2011-09-12 16:12:14.905862 Event: RECEIVER READY SENT
+On: 2011-09-12 16:12:20.399889 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-12 16:15:16.858935 ------------------
+On: 2011-09-12 16:15:16.859140 Event: LISTEN ON PORT: 50007
+On: 2011-09-12 16:15:18.724328 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 53266)
+On: 2011-09-12 16:15:18.724846 Event: TALK INITIALIZATION SENT
+On: 2011-09-12 16:15:18.725171 Event: RECEIVER READY SENT
+On: 2011-09-12 16:15:23.999890 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-12 16:18:26.944225 ------------------
+On: 2011-09-12 16:18:26.944421 Event: LISTEN ON PORT: 50007
+On: 2011-09-12 16:18:28.809780 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 50008)
+On: 2011-09-12 16:18:28.809979 Event: TALK INITIALIZATION SENT
+On: 2011-09-12 16:18:28.810119 Event: RECEIVER READY SENT
+On: 2011-09-12 16:18:34.635876 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-12 16:19:00.950542 ------------------
+On: 2011-09-12 16:19:00.950681 Event: LISTEN ON PORT: 50007
+On: 2011-09-12 16:19:02.800590 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 50012)
+On: 2011-09-12 16:19:02.800677 Event: TALK INITIALIZATION SENT
+On: 2011-09-12 16:19:02.800741 Event: RECEIVER READY SENT
+On: 2011-09-12 16:19:07.579882 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-12 16:20:42.868060 ------------------
+On: 2011-09-12 16:20:42.868263 Event: LISTEN ON PORT: 50007
+On: 2011-09-12 16:20:44.730978 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 50048)
+On: 2011-09-12 16:20:44.731284 Event: TALK INITIALIZATION SENT
+On: 2011-09-12 16:20:44.731556 Event: RECEIVER READY SENT
+On: 2011-09-12 16:20:49.983860 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-12 16:23:23.910331 ------------------
+On: 2011-09-12 16:23:23.910501 Event: LISTEN ON PORT: 50007
+On: 2011-09-12 16:23:25.776088 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 33016)
+On: 2011-09-12 16:23:25.776407 Event: TALK INITIALIZATION SENT
+On: 2011-09-12 16:23:25.776661 Event: RECEIVER READY SENT
+On: 2011-09-12 16:23:31.215885 Event: RECEIVE STATUS REPORTED
diff --git a/For Weekly Test/tricode/GSM TMobile handler.log b/For Weekly Test/tricode/GSM TMobile handler.log
new file mode 100755
index 0000000..6a7f938
--- /dev/null
+++ b/For Weekly Test/tricode/GSM TMobile handler.log
@@ -0,0 +1,56 @@
+
+
+------------------STARTED THE LOGGING 2011-09-09 12:48:50.590312 ------------------
+On: 2011-09-09 12:48:50.590686 Event: LISTEN ON PORT: 50012
+On: 2011-09-09 12:48:51.813655 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 47771)
+On: 2011-09-09 12:48:51.814016 Event: TALK INITIALIZATION SENT
+On: 2011-09-09 12:48:51.814216 Event: RECEIVER READY SENT
+On: 2011-09-09 12:49:05.881506 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-09 12:59:29.325937 ------------------
+On: 2011-09-09 12:59:29.326293 Event: LISTEN ON PORT: 50012
+On: 2011-09-09 12:59:30.568222 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 57949)
+On: 2011-09-09 12:59:30.568583 Event: TALK INITIALIZATION SENT
+On: 2011-09-09 12:59:30.568778 Event: RECEIVER READY SENT
+On: 2011-09-09 12:59:44.301288 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-09 13:05:00.413015 ------------------
+On: 2011-09-09 13:05:00.413369 Event: LISTEN ON PORT: 50012
+On: 2011-09-09 13:05:01.734174 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 44493)
+On: 2011-09-09 13:05:01.734527 Event: TALK INITIALIZATION SENT
+On: 2011-09-09 13:05:01.734718 Event: RECEIVER READY SENT
+On: 2011-09-09 13:05:13.425508 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-09 13:06:36.468289 ------------------
+On: 2011-09-09 13:06:36.468641 Event: LISTEN ON PORT: 50012
+On: 2011-09-09 13:06:37.752250 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 44509)
+On: 2011-09-09 13:06:37.752613 Event: TALK INITIALIZATION SENT
+On: 2011-09-09 13:06:37.752814 Event: RECEIVER READY SENT
+On: 2011-09-09 13:06:49.193498 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-09 16:26:54.291836 ------------------
+On: 2011-09-09 16:26:54.292192 Event: LISTEN ON PORT: 50012
+On: 2011-09-09 16:26:55.638609 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 42778)
+On: 2011-09-09 16:26:55.638985 Event: TALK INITIALIZATION SENT
+On: 2011-09-09 16:26:55.639188 Event: RECEIVER READY SENT
+On: 2011-09-09 16:27:30.685203 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-12 14:42:03.020109 ------------------
+On: 2011-09-12 14:42:03.020283 Event: LISTEN ON PORT: 50012
+On: 2011-09-12 14:42:04.876236 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 58176)
+On: 2011-09-12 14:42:04.876328 Event: TALK INITIALIZATION SENT
+On: 2011-09-12 14:42:04.876395 Event: RECEIVER READY SENT
+On: 2011-09-12 14:42:17.287864 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-12 14:44:01.136434 ------------------
+On: 2011-09-12 14:44:01.136573 Event: LISTEN ON PORT: 50012
+On: 2011-09-12 14:44:03.009101 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 58218)
+On: 2011-09-12 14:44:03.009384 Event: TALK INITIALIZATION SENT
+On: 2011-09-12 14:44:03.009624 Event: RECEIVER READY SENT
+On: 2011-09-12 14:44:13.523887 Event: RECEIVE STATUS REPORTED
diff --git a/For Weekly Test/tricode/GSM Vodaphone handler.log b/For Weekly Test/tricode/GSM Vodaphone handler.log
new file mode 100755
index 0000000..15335b2
--- /dev/null
+++ b/For Weekly Test/tricode/GSM Vodaphone handler.log
@@ -0,0 +1,56 @@
+
+
+------------------STARTED THE LOGGING 2011-09-09 12:01:29.973703 ------------------
+On: 2011-09-09 12:01:29.974088 Event: LISTEN ON PORT: 50011
+On: 2011-09-09 12:01:31.288549 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 39844)
+On: 2011-09-09 12:01:31.288923 Event: TALK INITIALIZATION SENT
+On: 2011-09-09 12:01:31.289125 Event: RECEIVER READY SENT
+On: 2011-09-09 12:01:42.069538 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-09 12:48:01.958543 ------------------
+On: 2011-09-09 12:48:01.958901 Event: LISTEN ON PORT: 50011
+On: 2011-09-09 12:48:03.266126 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 46507)
+On: 2011-09-09 12:48:03.266485 Event: TALK INITIALIZATION SENT
+On: 2011-09-09 12:48:03.266679 Event: RECEIVER READY SENT
+On: 2011-09-09 12:48:19.538059 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-09 12:51:23.872295 ------------------
+On: 2011-09-09 12:51:23.872646 Event: LISTEN ON PORT: 50011
+On: 2011-09-09 12:51:25.180609 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 58881)
+On: 2011-09-09 12:51:25.180965 Event: TALK INITIALIZATION SENT
+On: 2011-09-09 12:51:25.181157 Event: CALLER READY SENT
+On: 2011-09-09 12:51:35.665094 Event: CALLER STATUS SENT
+
+
+------------------STARTED THE LOGGING 2011-09-09 12:58:22.590937 ------------------
+On: 2011-09-09 12:58:22.591294 Event: LISTEN ON PORT: 50011
+On: 2011-09-09 12:58:23.464597 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 34076)
+On: 2011-09-09 12:58:23.464968 Event: TALK INITIALIZATION SENT
+On: 2011-09-09 12:58:23.465167 Event: RECEIVER READY SENT
+On: 2011-09-09 12:58:35.341553 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-09 13:05:50.346578 ------------------
+On: 2011-09-09 13:05:50.346932 Event: LISTEN ON PORT: 50011
+On: 2011-09-09 13:05:51.666150 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 55008)
+On: 2011-09-09 13:05:51.666510 Event: TALK INITIALIZATION SENT
+On: 2011-09-09 13:05:51.666703 Event: RECEIVER READY SENT
+On: 2011-09-09 13:06:02.993510 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-09 16:25:53.192832 ------------------
+On: 2011-09-09 16:25:53.193191 Event: LISTEN ON PORT: 50011
+On: 2011-09-09 16:25:54.538374 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 39631)
+On: 2011-09-09 16:25:54.538750 Event: TALK INITIALIZATION SENT
+On: 2011-09-09 16:25:54.538949 Event: RECEIVER READY SENT
+On: 2011-09-09 16:26:29.585947 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-09-12 14:41:15.765779 ------------------
+On: 2011-09-12 14:41:15.765922 Event: LISTEN ON PORT: 50011
+On: 2011-09-12 14:41:17.614908 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 37023)
+On: 2011-09-12 14:41:17.615107 Event: TALK INITIALIZATION SENT
+On: 2011-09-12 14:41:17.615280 Event: RECEIVER READY SENT
+On: 2011-09-12 14:41:27.639880 Event: RECEIVE STATUS REPORTED
diff --git a/For Weekly Test/tricode/GSMClass.py b/For Weekly Test/tricode/GSMClass.py
new file mode 100755
index 0000000..e994814
--- /dev/null
+++ b/For Weekly Test/tricode/GSMClass.py
@@ -0,0 +1,304 @@
+from serial import * #serial port library
+import string
+import sys
+import signal
+
+class TimeoutException(Exception):
+ pass
+
+class serialPort():
+
+ def __init__(self, portAddress, baudRate, timeout):
+ self.portAddress = portAddress
+ self.portExist = 0
+ self.ser = 0
+ self.baudRate = baudRate
+ self.signalStrength = 0
+ #self.callerConnected = -1
+ self.timer = timeout
+
+ self.debugMode = 0
+
+ def portInit(self):
+ portName = self.portAddress[-4:]
+ portExist = os.popen('dmesg | grep ' + portName).read()
+
+ if portExist == '':
+ return 0
+ else:
+ try:
+ self.ser = Serial(
+ port=self.portAddress,
+ baudrate=self.baudRate,
+ bytesize=EIGHTBITS,
+ parity=PARITY_NONE,
+ stopbits=STOPBITS_ONE
+ #timeout=0,
+ #writeTimeout=0
+ #xonxoff=0,
+ #rtscts=0
+ #interCharTimeout=None
+ #I didn't need to set these variables :)
+ )
+
+ self.ser.flushInput() #clean the input buffer for serial port
+ self.ser.write('AT\r')
+
+ received = self.__receiveData()
+
+ if received == 'OK':
+ self.portExist = 1
+ return 1 #cellphone is OK, receives commands
+ elif received == 'TIMEOUT':
+ return 'TIMEOUT'
+ else:
+ return 2 #cellphone has an error
+
+ except Exception, e:
+ import traceback
+ if self.debugMode == 1:
+ print e
+ print traceback.format_exc()
+
+ self.portExist = 3
+ return 3
+
+ def callNumber(self,numberToCall):
+ if self.portExist == 1:
+ try:
+ self.ser.flushInput() #clean the input buffer for serial port
+ self.ser.write('ATD'+str(numberToCall)+';\r')
+ if self.__receiveData() == 'OK':
+ return 1
+ else:
+ return 4
+
+ except Exception, e:
+ import traceback
+ if self.debugMode == 1:
+ print e
+ print traceback.format_exc()
+
+ return 3
+ else:
+ return 0
+
+
+ def hangUp(self):
+ if self.portExist == 1:
+ try:
+ self.ser.flushInput() #clean the input buffer for serial port
+ self.ser.write('AT+CHUP\r')
+ received = self.__receiveData()
+ if received == 'OK':
+ return 1
+ elif received == 'ERROR':
+ return 2 #other side hang up the call
+ else:
+ return 4
+ except Exception, e:
+ import traceback
+ if self.debugMode == 1:
+ print e
+ print traceback.format_exc()
+ return 3
+ else:
+ return 0
+
+
+ def closePort(self):
+ if self.portExist == 1:
+ try:
+ self.ser.flushInput() #clean the input buffer for serial port
+ self.ser.close()
+ return 1
+ except Exception, e:
+ import traceback
+ if self.debugMode == 1:
+ print e
+ print traceback.format_exc()
+ return 3
+ else:
+ return 0
+
+ def getSignalQuality(self):
+ if self.portExist == 1:
+ try:
+ self.ser.flushInput() #clean the input buffer for serial port
+ self.ser.write('AT+CSQ\r')
+ if self.__receiveData() == 'OK':
+ if self.__receiveData == 'SIGNAL':
+ return 1
+ else:
+ return 4
+ else:
+ return 2
+ except Exception, e:
+ import traceback
+ if self.debugMode == 1:
+ print e
+ print traceback.format_exc()
+ return 3
+
+ else:
+ return 0
+
+ def receiveCall(self):
+ if self.portExist == 1:
+ try:
+ self.ser.flushInput() #clean the input buffer for serial port
+ if self.__receiveData() == 'RING':
+ self.ser.write('ATA\r')
+ if self.__receiveData()=='OK':
+ return 1
+ else:
+ return 4
+ else:
+ return 2
+
+ except Exception, e:
+ import traceback
+ if self.debugMode == 1:
+ print e
+ print traceback.format_exc()
+ return 3
+ else:
+ return 0
+
+ def currentCall(self):
+ if self.portExist == 1:
+ try:
+ self.ser.flushInput() #clean the input buffer for serial port
+ self.ser.write('AT+CLCC\r')
+ received = self.__receiveData()
+ if received == 'OK':
+ return 2 #not yet in a call
+ elif received == 'ACTIVE':
+ return 1 #in a call
+ elif received == 'HELD':
+ return 5 #held call
+ elif received == 'DIALING':
+ return 6 #dialing
+ elif received == 'ALERTING':
+ return 7 #alerting the call
+ elif received == 'INCOMING':
+ return 8 #incoming call
+ elif received == 'WAITING':
+ return 9 #waiting for a call
+
+ else:
+ return received #in some other state
+ except Exception, e:
+ import traceback
+ if self.debugMode == 1:
+ print e
+ print traceback.format_exc()
+ return 3
+ else:
+ return 0
+
+ def __receiveData(self):
+ def timeout_handler(signum, frame):
+ raise TimeoutException()
+
+ old_handler = signal.signal(signal.SIGALRM, timeout_handler)
+ signal.alarm(self.timer)
+
+ bufferData = ''
+ lines = ''
+ line = ''
+
+ try:
+ while True:
+ bufferData = bufferData + self.ser.read(self.ser.inWaiting()) #read the serial port and add it to the buffer variable
+ if '\n' in bufferData: #if a new line character is found in the buffer then the cellphone has sent something
+ lines = bufferData.split('\n') #parse the buffer variable with the new line character
+ last_received = lines.pop(0) #put into last_received variable the first content from lines (FIFO)
+
+ bufferData = '\n'.join(lines) #add a new line to the buffer variable
+
+ last_received=last_received.split('\n') #parse the last received value with new lines
+ line = last_received[0].replace(chr(13), '') #remove \r from the first parsed value in last_received and return me a nicely parsed value :)
+ if self.debugMode == 1:
+ if len(line) > 0:
+ print line
+
+ if line == 'OK':
+ signal.signal(signal.SIGALRM, old_handler)
+ signal.alarm(0)
+ return 'OK'
+
+ elif line == 'ERROR':
+ signal.signal(signal.SIGALRM, old_handler)
+ signal.alarm(0)
+ return 'ERROR'
+
+ elif line[0:11] == '+CME ERROR:':
+ if self.debugMode == 1:
+ print 'ERROR:', line
+ signal.signal(signal.SIGALRM, old_handler)
+ signal.alarm(0)
+ return 'ERROR'
+
+ elif line == 'RING':
+ signal.signal(signal.SIGALRM, old_handler)
+ signal.alarm(0)
+ return 'RING'
+
+ elif line[0:5] == '+CSQ:': #+CSQ:
+ space = int(string.find(line,' '))+1 #find the (space) sign
+ coma = int(string.find(line,',')) #find the , (coma) sign
+ self.signalStrength = (int(line[space:coma])*2)-113
+ signal.signal(signal.SIGALRM, old_handler)
+ signal.alarm(0)
+ return 'SIGNAL'
+
+ elif line == 'NO CARRIER':
+ signal.signal(signal.SIGALRM, old_handler)
+ signal.alarm(0)
+ return 'NO CARRIER'
+
+ elif line == 'BUSY':
+ signal.signal(signal.SIGALRM, old_handler)
+ signal.alarm(0)
+ return 'BUSY'
+
+ elif line[0:6] == '+CLCC:':
+ #+CLCC: 1,0,
+ #self.ser.flushInput()
+ if line[11:12] == '0':
+ signal.signal(signal.SIGALRM, old_handler)
+ signal.alarm(0)
+ return 'ACTIVE'
+ elif line[11:12] == '1':
+ signal.signal(signal.SIGALRM, old_handler)
+ signal.alarm(0)
+ return 'HELD'
+ elif line[11:12] == '2':
+ signal.signal(signal.SIGALRM, old_handler)
+ signal.alarm(0)
+ return 'DIALING'
+ elif line[11:12] == '3':
+ signal.signal(signal.SIGALRM, old_handler)
+ signal.alarm(0)
+ return 'ALERTING'
+ elif line[11:12] == '4':
+ signal.signal(signal.SIGALRM, old_handler)
+ signal.alarm(0)
+ return 'INCOMING'
+ elif line[11:12] == '5':
+ signal.signal(signal.SIGALRM, old_handler)
+ signal.alarm(0)
+ return 'WAITING'
+
+ except TimeoutException:
+ signal.signal(signal.SIGALRM, old_handler)
+ signal.alarm(0)
+ return 'TIMEOUT'
+
+ except Exception, e:
+ signal.signal(signal.SIGALRM, old_handler)
+ signal.alarm(0)
+ print 'NO GOOD'
+ print e
+ return 3
diff --git a/For Weekly Test/tricode/GSMClass.pyc b/For Weekly Test/tricode/GSMClass.pyc
new file mode 100644
index 0000000..14f3608
--- /dev/null
+++ b/For Weekly Test/tricode/GSMClass.pyc
Binary files differ
diff --git a/For Weekly Test/tricode/GSMExt.Eplus handler.log b/For Weekly Test/tricode/GSMExt.Eplus handler.log
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/For Weekly Test/tricode/GSMExt.Eplus handler.log
diff --git a/For Weekly Test/tricode/GSMExt.O2 handler.log b/For Weekly Test/tricode/GSMExt.O2 handler.log
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/For Weekly Test/tricode/GSMExt.O2 handler.log
diff --git a/For Weekly Test/tricode/GSMExt.Tm handler.log b/For Weekly Test/tricode/GSMExt.Tm handler.log
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/For Weekly Test/tricode/GSMExt.Tm handler.log
diff --git a/For Weekly Test/tricode/GSMExt.Voda handler.log b/For Weekly Test/tricode/GSMExt.Voda handler.log
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/For Weekly Test/tricode/GSMExt.Voda handler.log
diff --git a/For Weekly Test/tricode/GSMHandler.py b/For Weekly Test/tricode/GSMHandler.py
new file mode 100755
index 0000000..70d4cc4
--- /dev/null
+++ b/For Weekly Test/tricode/GSMHandler.py
@@ -0,0 +1,272 @@
+import ServerClass
+import GSMClass
+import LogFileClass
+from time import sleep
+import sys
+import setproctitle
+
+global portListen
+global portAddress
+
+
+if len(sys.argv) <> 4:
+ print "Error given command"
+ sys.exit(2)
+
+
+handler = sys.argv[3]
+portAddress = sys.argv[2]
+portListen = int(sys.argv[1])
+
+def initLogfile():
+ global nameOfLogFile
+
+ nameOfLogFile = str(handler)+' handler.log'
+
+baudRate = 19200
+
+initLogfile()
+logger = LogFileClass.Logging(nameOfLogFile)
+
+errorCount = 0
+
+logger.logEvent('')
+
+whileCounter =0
+
+#define global varibales
+global lastState
+global resetState
+lastState = 0
+resetState = 0
+
+
+def initSystem():
+ print 'init system'
+
+ global handlerSocket
+ global gsmDevice
+ global initTalkVar
+ global lastState
+
+ global numberToCall
+ global resetState
+
+ initTalkVar = 0 #variable used to know if we initialized the start talk
+ lastState = 0 #variable used to know
+ numberToCall = '000' #number to call
+ resetState = 0
+
+ handlerSocket = ServerClass.ServerHandler(portListen)
+ logger.logEvent('LISTEN ON PORT: '+str(portListen))
+
+ #add this if you need it
+ gsmDevice = GSMClass.serialPort(portAddress, baudRate, 60)
+
+ initDevice = gsmDevice.portInit()
+ ########################################################
+
+ #add nice formating to the log file :)
+ anyConnection = handlerSocket.openSocket()
+
+
+ if anyConnection == 1 and initDevice == 1:
+ logger.logEvent('CONNECTION ESTABLISHED AND DEVICE WORKING: ' + str(handlerSocket.connectedTo()))
+ return 1
+
+ elif anyConnection == 1 and initDevice == 0:
+ logger.logEvent('$connection established but device not working: ' + str(handlerSocket.connectedTo()))
+ terminateConnection()
+ return 2
+ else:
+ logger.logEvent('$no connection')
+ sys.exit(1)
+ return 0
+
+def receiveMessage(timeout):
+
+ message = str(handlerSocket.receiveData(timeout))
+
+ if message != '0' and message !='NO DATA':
+ print 'in receive message', message, lastState
+
+ if message == 'HELLO HANDLER' and lastState == 0:
+ outcome = initTalk()
+ if outcome == 1:
+ logger.logEvent('TALK INITIALIZATION SENT')
+ else:
+ logger.logEvent('$talk initialization not sent: ' + str(outcome))
+
+ elif message == 'RECEIVER' and lastState == 1:
+ outcome = initReceiver()
+ if outcome == 1:
+ logger.logEvent('RECEIVER READY SENT')
+ else:
+ logger.logEvent('$receiver ready not sent: ' + str(outcome))
+
+ elif message == 'RECEIVE START' and lastState == 2:
+ outcome = receiveStart()
+ if outcome == 1:
+ logger.logEvent('RECEIVE STATUS REPORTED')
+ else:
+ logger.logEvent('$receive status not reported: ' + str(outcome))
+
+ elif message[0:6] == 'CALLER' and lastState == 1:
+ outcome = initCaller()
+
+ global numberToCall
+ numberToCall = message[7:]
+ if outcome == 1:
+ logger.logEvent('CALLER READY SENT')
+ else:
+ logger.logEvent('$caller ready not sent: ' + str(outcome))
+
+ elif message == 'CALL START' and lastState == 4:
+ outcome = callStart(numberToCall)
+ if outcome == 1:
+ logger.logEvent('CALLER STATUS SENT')
+ else:
+ logger.logEvent('$caller status not sent: ' + str(outcome))
+
+ elif message == 'TERMINATE CONNECTION' and (lastState == 5 or lastState == 3):
+ outcome = terminateConnection()
+ if outcome == 1:
+ logger.logEvent('TERMINATED THE CONNECTION AFTER TEST')
+ else:
+ logger.logEvent('$connection could not be terminated after the test: ' + str(outcome))
+
+ elif message == 'TERMINATE CONNECTION':
+ outcome = terminateConnection()
+ if outcome == 1:
+ logger.logEvent('TERMINATED THE CONNECTION IN MIDDLE. IN STATE: ' + str(lastState) )
+ else:
+ logger.logEvent('$connection could not be terminated in middle: ' + str(outcome) + ' in state: ' + str(lastState))
+ else:
+ outcome = other()
+ logger.logEvent('other appeared')
+ terminateConnection()
+
+
+ return 1
+ #return 0
+
+########INIT TALK PART########
+def initTalk():
+ print 'init talk'
+
+ #initialize the talk between handler and controller
+ global lastState
+ lastState = 1
+ sendMessage = handlerSocket.sendData('HELLO CONTROLLER')
+ return sendMessage
+##############################
+
+
+########RECEIVE PART########
+def initReceiver():
+ print 'initReceiver'
+
+ #init function to initialize the receiver
+ global lastState
+ lastState = 2
+ sendMessage = handlerSocket.sendData('RECEIVER READY')
+ return sendMessage
+
+def receiveStart():
+ print 'receiveStart'
+
+ #wait for a call and report if you received it and it was successfull or not
+ global lastState
+ lastState = 3
+ receiveCall = gsmDevice.receiveCall()
+
+ if receiveCall == 1:
+ callSuccess = 'CALL OK'
+ else:
+ callSuccess = 'CALL NOT OK'
+
+ tryHangUp = gsmDevice.hangUp()
+
+ sendMessage = handlerSocket.sendData(callSuccess)
+ return sendMessage
+############################
+
+
+########CALL PART########
+def initCaller():
+ print 'initCaller'
+
+ #initialize caller here
+ global lastState
+ lastState = 4
+ sendMessage = handlerSocket.sendData('CALLER READY')
+ return sendMessage
+
+def callStart(numberToCall):
+ print 'initCaller'
+
+ #call the number here
+ global lastState
+ lastState = 5
+
+ callSuccess = 'CALL NOT OK'
+
+ tryCall = gsmDevice.callNumber(numberToCall)
+ if tryCall != 1:
+ callSuccess = 'CALL NOT OK'
+ else:
+ sleep(2)
+ activeCall = gsmDevice.currentCall()
+ counter = 0
+ while(activeCall!=1):
+ sleep(1)
+ activeCall = gsmDevice.currentCall()
+ if counter == 6:
+ break
+ counter += 1
+
+ if activeCall == 1:
+ callSuccess = 'CALL OK'
+ else:
+ callSuccess = 'CALL NOT OK'
+
+ tryHangUp = gsmDevice.hangUp()
+
+ return handlerSocket.sendData(callSuccess)
+#########################
+
+
+########TERMINATE PART########
+def terminateConnection():
+ print 'terminate connection'
+ global resetState
+ close = handlerSocket.closeConnection()
+ resetState = 1
+ sys.exit(0.5)
+ return close
+##############################
+
+########TERMINATE PART########
+def other():
+ print 'other'
+ global lastState
+ global resetState
+
+ close = handlerSocket.closeConnection()
+ lastState = 8
+ resetState = 1
+ return 1
+##############################
+
+
+setproctitle.setproctitle('GSM Handler')
+while 1:
+ test = initSystem()
+ if test == 1:
+ print 'initialized system'
+ receivedMessage = 0
+ while receivedMessage < 4 and resetState!= 1:
+ receivedMessage += receiveMessage(30)
+
+ del handlerSocket
+ del gsmDevice
diff --git a/For Weekly Test/tricode/GSMRZ1 handler.log b/For Weekly Test/tricode/GSMRZ1 handler.log
new file mode 100644
index 0000000..6277bf0
--- /dev/null
+++ b/For Weekly Test/tricode/GSMRZ1 handler.log
@@ -0,0 +1,601 @@
+
+
+------------------STARTED THE LOGGING 2011-10-14 16:48:49.977478 ------------------
+On: 2011-10-14 16:48:49.977637 Event: LISTEN ON PORT: 31898
+On: 2011-10-14 16:48:51.182121 Event: $no connection
+
+
+------------------STARTED THE LOGGING 2011-10-14 16:50:14.113205 ------------------
+On: 2011-10-14 16:50:14.113337 Event: LISTEN ON PORT: 45148
+On: 2011-10-14 16:50:15.375198 Event: $no connection
+
+
+------------------STARTED THE LOGGING 2011-10-14 17:02:19.885157 ------------------
+On: 2011-10-14 17:02:19.885291 Event: LISTEN ON PORT: 54353
+On: 2011-10-14 17:02:21.034564 Event: $no connection
+
+
+------------------STARTED THE LOGGING 2011-10-14 17:09:22.490987 ------------------
+On: 2011-10-14 17:09:22.491122 Event: LISTEN ON PORT: 58794
+On: 2011-10-14 17:09:23.793238 Event: $no connection
+
+
+------------------STARTED THE LOGGING 2011-10-14 17:54:29.807228 ------------------
+On: 2011-10-14 17:54:29.807364 Event: LISTEN ON PORT: 59733
+On: 2011-10-14 17:54:31.117494 Event: $no connection
+
+
+------------------STARTED THE LOGGING 2011-10-14 17:55:54.739343 ------------------
+On: 2011-10-14 17:55:54.739479 Event: LISTEN ON PORT: 47152
+On: 2011-10-14 17:55:55.839460 Event: $no connection
+
+
+------------------STARTED THE LOGGING 2011-10-14 17:56:12.625318 ------------------
+On: 2011-10-14 17:56:12.625467 Event: LISTEN ON PORT: 56403
+On: 2011-10-14 17:56:13.934547 Event: $no connection
+
+
+------------------STARTED THE LOGGING 2011-10-14 17:58:40.140124 ------------------
+On: 2011-10-14 17:58:40.140261 Event: LISTEN ON PORT: 48980
+On: 2011-10-14 17:58:41.470516 Event: $no connection
+
+
+------------------STARTED THE LOGGING 2011-10-14 18:00:18.792429 ------------------
+On: 2011-10-14 18:00:18.792566 Event: LISTEN ON PORT: 44749
+On: 2011-10-14 18:00:20.089680 Event: $no connection
+
+
+------------------STARTED THE LOGGING 2011-10-14 19:13:51.248665 ------------------
+On: 2011-10-14 19:13:51.248806 Event: LISTEN ON PORT: 43495
+On: 2011-10-14 19:13:52.589537 Event: $no connection
+
+
+------------------STARTED THE LOGGING 2011-10-14 19:15:21.381180 ------------------
+On: 2011-10-14 19:15:21.381320 Event: LISTEN ON PORT: 57544
+On: 2011-10-14 19:15:22.725775 Event: $no connection
+
+
+------------------STARTED THE LOGGING 2011-10-14 19:16:40.347242 ------------------
+On: 2011-10-14 19:16:40.347380 Event: LISTEN ON PORT: 34500
+On: 2011-10-14 19:16:41.684825 Event: $no connection
+
+
+------------------STARTED THE LOGGING 2011-10-17 17:23:56.668273 ------------------
+On: 2011-10-17 17:23:56.668423 Event: LISTEN ON PORT: 49976
+On: 2011-10-17 17:23:57.912429 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 41746)
+On: 2011-10-17 17:23:57.912848 Event: TALK INITIALIZATION SENT
+On: 2011-10-17 17:23:57.913049 Event: RECEIVER READY SENT
+
+
+------------------STARTED THE LOGGING 2011-10-17 17:30:03.932073 ------------------
+On: 2011-10-17 17:30:03.932213 Event: LISTEN ON PORT: 48224
+On: 2011-10-17 17:30:05.250068 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 45195)
+On: 2011-10-17 17:30:05.250459 Event: TALK INITIALIZATION SENT
+On: 2011-10-17 17:30:05.250666 Event: CALLER READY SENT
+On: 2011-10-17 17:30:14.005561 Event: CALLER STATUS SENT
+
+
+------------------STARTED THE LOGGING 2011-10-17 17:38:25.205605 ------------------
+On: 2011-10-17 17:38:25.205749 Event: LISTEN ON PORT: 34958
+On: 2011-10-17 17:38:26.538192 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 53089)
+On: 2011-10-17 17:38:26.538567 Event: TALK INITIALIZATION SENT
+On: 2011-10-17 17:38:26.538775 Event: CALLER READY SENT
+On: 2011-10-17 17:38:32.069577 Event: CALLER STATUS SENT
+On: 2011-10-17 17:38:42.069885 Event: other appeared
+
+
+------------------STARTED THE LOGGING 2011-10-17 17:46:44.040507 ------------------
+On: 2011-10-17 17:46:44.040644 Event: LISTEN ON PORT: 42482
+On: 2011-10-17 17:46:45.371908 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 45875)
+On: 2011-10-17 17:46:45.372268 Event: TALK INITIALIZATION SENT
+On: 2011-10-17 17:46:45.372472 Event: CALLER READY SENT
+On: 2011-10-17 17:46:52.093572 Event: CALLER STATUS SENT
+On: 2011-10-17 17:47:02.094744 Event: other appeared
+
+
+------------------STARTED THE LOGGING 2011-10-17 18:09:47.252730 ------------------
+On: 2011-10-17 18:09:47.252867 Event: LISTEN ON PORT: 37675
+On: 2011-10-17 18:09:48.575619 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 56062)
+On: 2011-10-17 18:09:48.575992 Event: TALK INITIALIZATION SENT
+On: 2011-10-17 18:09:48.576200 Event: CALLER READY SENT
+On: 2011-10-17 18:09:54.117572 Event: CALLER STATUS SENT
+On: 2011-10-17 18:10:04.117876 Event: other appeared
+
+
+------------------STARTED THE LOGGING 2011-10-17 18:14:04.027041 ------------------
+On: 2011-10-17 18:14:04.027180 Event: LISTEN ON PORT: 35127
+On: 2011-10-17 18:14:05.370231 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 50946)
+On: 2011-10-17 18:14:05.370605 Event: TALK INITIALIZATION SENT
+On: 2011-10-17 18:14:05.370807 Event: RECEIVER READY SENT
+On: 2011-10-17 18:14:09.905633 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-10-17 18:14:30.628591 ------------------
+On: 2011-10-17 18:14:30.628732 Event: LISTEN ON PORT: 49956
+On: 2011-10-17 18:14:31.909301 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 43644)
+On: 2011-10-17 18:14:31.909750 Event: TALK INITIALIZATION SENT
+On: 2011-10-17 18:14:31.910153 Event: CALLER READY SENT
+On: 2011-10-17 18:14:41.910463 Event: other appeared
+
+
+------------------STARTED THE LOGGING 2011-10-17 18:15:46.539275 ------------------
+On: 2011-10-17 18:15:46.539415 Event: LISTEN ON PORT: 55421
+On: 2011-10-17 18:15:47.817830 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 55012)
+On: 2011-10-17 18:15:47.818215 Event: TALK INITIALIZATION SENT
+On: 2011-10-17 18:15:47.818415 Event: CALLER READY SENT
+
+
+------------------STARTED THE LOGGING 2011-10-17 18:16:33.583506 ------------------
+On: 2011-10-17 18:16:33.583643 Event: LISTEN ON PORT: 51534
+On: 2011-10-17 18:16:34.878623 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 35960)
+On: 2011-10-17 18:16:34.879013 Event: TALK INITIALIZATION SENT
+On: 2011-10-17 18:16:34.879223 Event: CALLER READY SENT
+On: 2011-10-17 18:16:44.879521 Event: other appeared
+
+
+------------------STARTED THE LOGGING 2011-10-18 17:59:53.321068 ------------------
+On: 2011-10-18 17:59:53.321208 Event: LISTEN ON PORT: 37958
+On: 2011-10-18 17:59:54.509246 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 34102)
+On: 2011-10-18 17:59:54.509645 Event: TALK INITIALIZATION SENT
+On: 2011-10-18 17:59:54.510077 Event: CALLER READY SENT
+
+
+------------------STARTED THE LOGGING 2011-10-18 18:00:07.510807 ------------------
+On: 2011-10-18 18:00:07.510942 Event: LISTEN ON PORT: 44278
+On: 2011-10-18 18:00:08.603163 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 49709)
+On: 2011-10-18 18:00:08.603539 Event: TALK INITIALIZATION SENT
+On: 2011-10-18 18:00:08.603744 Event: RECEIVER READY SENT
+On: 2011-10-18 18:00:13.341838 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-10-18 18:03:10.142306 ------------------
+On: 2011-10-18 18:03:10.142437 Event: LISTEN ON PORT: 40645
+On: 2011-10-18 18:03:11.447158 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 54533)
+On: 2011-10-18 18:03:11.447536 Event: TALK INITIALIZATION SENT
+On: 2011-10-18 18:03:11.447746 Event: RECEIVER READY SENT
+On: 2011-10-18 18:03:15.761838 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-10-18 18:04:09.511701 ------------------
+On: 2011-10-18 18:04:09.511837 Event: LISTEN ON PORT: 46538
+On: 2011-10-18 18:04:10.763566 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 51299)
+On: 2011-10-18 18:04:10.763943 Event: TALK INITIALIZATION SENT
+On: 2011-10-18 18:04:10.764149 Event: RECEIVER READY SENT
+On: 2011-10-18 18:04:14.845834 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-10-18 18:04:57.336919 ------------------
+On: 2011-10-18 18:04:57.337057 Event: LISTEN ON PORT: 47622
+On: 2011-10-18 18:04:58.657899 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 50911)
+On: 2011-10-18 18:04:58.658279 Event: TALK INITIALIZATION SENT
+On: 2011-10-18 18:04:58.658485 Event: RECEIVER READY SENT
+On: 2011-10-18 18:05:02.845832 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-10-18 18:05:57.063122 ------------------
+On: 2011-10-18 18:05:57.063256 Event: LISTEN ON PORT: 47391
+On: 2011-10-18 18:05:58.313009 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 51917)
+On: 2011-10-18 18:05:58.313408 Event: TALK INITIALIZATION SENT
+On: 2011-10-18 18:05:58.313615 Event: CALLER READY SENT
+On: 2011-10-18 18:06:06.414504 Event: CALLER STATUS SENT
+On: 2011-10-18 18:06:06.414764 Event: other appeared
+
+
+------------------STARTED THE LOGGING 2011-10-18 18:06:15.199401 ------------------
+On: 2011-10-18 18:06:15.199538 Event: LISTEN ON PORT: 36448
+On: 2011-10-18 18:06:16.509402 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 44761)
+On: 2011-10-18 18:06:16.509830 Event: TALK INITIALIZATION SENT
+On: 2011-10-18 18:06:16.510036 Event: RECEIVER READY SENT
+On: 2011-10-18 18:06:21.705828 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-10-18 18:07:46.580797 ------------------
+On: 2011-10-18 18:07:46.580927 Event: LISTEN ON PORT: 45845
+On: 2011-10-18 18:07:47.774057 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 54273)
+On: 2011-10-18 18:07:47.774455 Event: TALK INITIALIZATION SENT
+On: 2011-10-18 18:07:47.774667 Event: CALLER READY SENT
+On: 2011-10-18 18:07:56.470453 Event: CALLER STATUS SENT
+On: 2011-10-18 18:07:56.470710 Event: other appeared
+
+
+------------------STARTED THE LOGGING 2011-10-18 18:08:05.401234 ------------------
+On: 2011-10-18 18:08:05.401371 Event: LISTEN ON PORT: 37736
+On: 2011-10-18 18:08:06.573402 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 43547)
+On: 2011-10-18 18:08:06.573842 Event: TALK INITIALIZATION SENT
+On: 2011-10-18 18:08:06.574067 Event: RECEIVER READY SENT
+On: 2011-10-18 18:08:15.869814 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-10-18 18:08:45.559840 ------------------
+On: 2011-10-18 18:08:45.559979 Event: LISTEN ON PORT: 52333
+On: 2011-10-18 18:08:46.824974 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 43181)
+On: 2011-10-18 18:08:46.825596 Event: TALK INITIALIZATION SENT
+On: 2011-10-18 18:08:46.826485 Event: CALLER READY SENT
+On: 2011-10-18 18:08:56.826812 Event: other appeared
+
+
+------------------STARTED THE LOGGING 2011-10-18 18:09:45.103265 ------------------
+On: 2011-10-18 18:09:45.103401 Event: LISTEN ON PORT: 55111
+On: 2011-10-18 18:09:46.416496 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 38094)
+On: 2011-10-18 18:09:46.416870 Event: TALK INITIALIZATION SENT
+On: 2011-10-18 18:09:46.417075 Event: RECEIVER READY SENT
+On: 2011-10-18 18:09:51.209832 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-10-18 18:11:27.135288 ------------------
+On: 2011-10-18 18:11:27.135426 Event: LISTEN ON PORT: 52260
+On: 2011-10-18 18:11:28.364871 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 38944)
+On: 2011-10-18 18:11:28.365273 Event: TALK INITIALIZATION SENT
+On: 2011-10-18 18:11:28.365489 Event: CALLER READY SENT
+On: 2011-10-18 18:11:38.365807 Event: other appeared
+
+
+------------------STARTED THE LOGGING 2011-10-18 18:12:27.063729 ------------------
+On: 2011-10-18 18:12:27.063870 Event: LISTEN ON PORT: 59916
+On: 2011-10-18 18:12:28.323373 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 53167)
+On: 2011-10-18 18:12:28.323744 Event: TALK INITIALIZATION SENT
+On: 2011-10-18 18:12:28.323943 Event: RECEIVER READY SENT
+On: 2011-10-18 18:12:32.429879 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-10-18 19:40:32.687770 ------------------
+On: 2011-10-18 19:40:32.687904 Event: LISTEN ON PORT: 45722
+On: 2011-10-18 19:40:33.914115 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 50785)
+On: 2011-10-18 19:40:33.914513 Event: TALK INITIALIZATION SENT
+On: 2011-10-18 19:40:33.914717 Event: CALLER READY SENT
+On: 2011-10-18 19:40:43.915027 Event: other appeared
+
+
+------------------STARTED THE LOGGING 2011-10-18 19:42:04.794487 ------------------
+On: 2011-10-18 19:42:04.794628 Event: LISTEN ON PORT: 46564
+On: 2011-10-18 19:42:06.080153 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 57475)
+On: 2011-10-18 19:42:06.080555 Event: TALK INITIALIZATION SENT
+On: 2011-10-18 19:42:06.080771 Event: CALLER READY SENT
+On: 2011-10-18 19:42:16.081070 Event: other appeared
+
+
+------------------STARTED THE LOGGING 2011-10-18 19:46:20.856543 ------------------
+On: 2011-10-18 19:46:20.856682 Event: LISTEN ON PORT: 34929
+On: 2011-10-18 19:46:22.064034 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 52140)
+On: 2011-10-18 19:46:22.064429 Event: TALK INITIALIZATION SENT
+On: 2011-10-18 19:46:22.064639 Event: CALLER READY SENT
+On: 2011-10-18 19:46:32.064942 Event: other appeared
+
+
+------------------STARTED THE LOGGING 2011-10-18 19:47:50.260385 ------------------
+On: 2011-10-18 19:47:50.261387 Event: LISTEN ON PORT: 52675
+On: 2011-10-18 19:47:51.206435 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 33001)
+On: 2011-10-18 19:47:51.206810 Event: TALK INITIALIZATION SENT
+On: 2011-10-18 19:47:51.207019 Event: RECEIVER READY SENT
+On: 2011-10-18 19:47:55.937900 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-10-18 19:48:32.569248 ------------------
+On: 2011-10-18 19:48:32.569387 Event: LISTEN ON PORT: 30450
+On: 2011-10-18 19:48:33.874006 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 38459)
+On: 2011-10-18 19:48:33.874411 Event: TALK INITIALIZATION SENT
+On: 2011-10-18 19:48:33.874623 Event: CALLER READY SENT
+On: 2011-10-18 19:48:43.874930 Event: other appeared
+
+
+------------------STARTED THE LOGGING 2011-10-18 19:50:01.791306 ------------------
+On: 2011-10-18 19:50:01.791444 Event: LISTEN ON PORT: 56889
+On: 2011-10-18 19:50:02.989728 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 48375)
+On: 2011-10-18 19:50:02.990116 Event: TALK INITIALIZATION SENT
+On: 2011-10-18 19:50:02.990325 Event: RECEIVER READY SENT
+On: 2011-10-18 19:50:07.757880 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-10-18 19:50:51.143154 ------------------
+On: 2011-10-18 19:50:51.143294 Event: LISTEN ON PORT: 57267
+On: 2011-10-18 19:50:52.445469 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 45258)
+On: 2011-10-18 19:50:52.445922 Event: TALK INITIALIZATION SENT
+On: 2011-10-18 19:50:52.446311 Event: CALLER READY SENT
+On: 2011-10-18 19:51:02.446621 Event: other appeared
+
+
+------------------STARTED THE LOGGING 2011-10-18 19:52:16.310600 ------------------
+On: 2011-10-18 19:52:16.310736 Event: LISTEN ON PORT: 55762
+On: 2011-10-18 19:52:17.596170 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 37556)
+On: 2011-10-18 19:52:17.596545 Event: TALK INITIALIZATION SENT
+On: 2011-10-18 19:52:17.596743 Event: RECEIVER READY SENT
+On: 2011-10-18 19:52:22.021823 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-10-18 19:53:30.890425 ------------------
+On: 2011-10-18 19:53:30.890562 Event: LISTEN ON PORT: 43740
+On: 2011-10-18 19:53:32.079339 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 42644)
+On: 2011-10-18 19:53:32.079733 Event: TALK INITIALIZATION SENT
+On: 2011-10-18 19:53:32.079938 Event: CALLER READY SENT
+On: 2011-10-18 19:53:42.080246 Event: other appeared
+
+
+------------------STARTED THE LOGGING 2011-10-18 19:54:35.931139 ------------------
+On: 2011-10-18 19:54:35.931276 Event: LISTEN ON PORT: 32934
+On: 2011-10-18 19:54:37.219111 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 44363)
+On: 2011-10-18 19:54:37.219490 Event: TALK INITIALIZATION SENT
+On: 2011-10-18 19:54:37.219699 Event: RECEIVER READY SENT
+On: 2011-10-18 19:54:41.957836 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-10-18 19:54:59.091461 ------------------
+On: 2011-10-18 19:54:59.091598 Event: LISTEN ON PORT: 57336
+On: 2011-10-18 19:55:00.253588 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 55170)
+On: 2011-10-18 19:55:00.254031 Event: TALK INITIALIZATION SENT
+On: 2011-10-18 19:55:00.254262 Event: CALLER READY SENT
+On: 2011-10-18 19:55:27.026823 Event: CALLER STATUS SENT
+On: 2011-10-18 19:55:27.027085 Event: other appeared
+
+
+------------------STARTED THE LOGGING 2011-10-18 19:55:53.780502 ------------------
+On: 2011-10-18 19:55:53.780641 Event: LISTEN ON PORT: 58483
+On: 2011-10-18 19:55:55.105735 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 43800)
+On: 2011-10-18 19:55:55.106116 Event: TALK INITIALIZATION SENT
+On: 2011-10-18 19:55:55.106317 Event: RECEIVER READY SENT
+On: 2011-10-18 19:55:59.901818 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-10-18 19:56:16.411558 ------------------
+On: 2011-10-18 19:56:16.411697 Event: LISTEN ON PORT: 47521
+On: 2011-10-18 19:56:17.693180 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 37299)
+On: 2011-10-18 19:56:17.693573 Event: TALK INITIALIZATION SENT
+On: 2011-10-18 19:56:17.694007 Event: CALLER READY SENT
+
+
+------------------STARTED THE LOGGING 2011-10-18 19:56:30.458032 ------------------
+On: 2011-10-18 19:56:30.458173 Event: LISTEN ON PORT: 51855
+On: 2011-10-18 19:56:31.790433 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 46101)
+On: 2011-10-18 19:56:31.790813 Event: TALK INITIALIZATION SENT
+On: 2011-10-18 19:56:31.791020 Event: RECEIVER READY SENT
+On: 2011-10-18 19:56:36.141854 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-10-18 19:57:25.085064 ------------------
+On: 2011-10-18 19:57:25.085200 Event: LISTEN ON PORT: 30247
+On: 2011-10-18 19:57:26.377629 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 48514)
+On: 2011-10-18 19:57:26.378067 Event: TALK INITIALIZATION SENT
+On: 2011-10-18 19:57:26.378276 Event: CALLER READY SENT
+On: 2011-10-18 19:57:33.998434 Event: CALLER STATUS SENT
+On: 2011-10-18 19:57:33.998697 Event: other appeared
+
+
+------------------STARTED THE LOGGING 2011-10-18 19:57:42.765574 ------------------
+On: 2011-10-18 19:57:42.765795 Event: LISTEN ON PORT: 45904
+On: 2011-10-18 19:57:44.086897 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 51624)
+On: 2011-10-18 19:57:44.087268 Event: TALK INITIALIZATION SENT
+On: 2011-10-18 19:57:44.087473 Event: RECEIVER READY SENT
+On: 2011-10-18 19:57:48.013851 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-10-18 20:00:20.737922 ------------------
+On: 2011-10-18 20:00:20.738070 Event: LISTEN ON PORT: 35566
+On: 2011-10-18 20:00:22.016085 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 56065)
+On: 2011-10-18 20:00:22.016462 Event: TALK INITIALIZATION SENT
+On: 2011-10-18 20:00:22.016673 Event: CALLER READY SENT
+On: 2011-10-18 20:00:47.569761 Event: CALLER STATUS SENT
+On: 2011-10-18 20:00:47.577148 Event: other appeared
+
+
+------------------STARTED THE LOGGING 2011-10-18 20:00:52.357829 ------------------
+On: 2011-10-18 20:00:52.357976 Event: LISTEN ON PORT: 43727
+On: 2011-10-18 20:00:53.641225 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 36246)
+On: 2011-10-18 20:00:53.641729 Event: TALK INITIALIZATION SENT
+On: 2011-10-18 20:00:53.642354 Event: CALLER READY SENT
+On: 2011-10-18 20:01:01.302423 Event: CALLER STATUS SENT
+On: 2011-10-18 20:01:01.302678 Event: other appeared
+
+
+------------------STARTED THE LOGGING 2011-10-18 20:01:10.077765 ------------------
+On: 2011-10-18 20:01:10.077912 Event: LISTEN ON PORT: 31031
+On: 2011-10-18 20:01:11.390259 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 43676)
+On: 2011-10-18 20:01:11.390636 Event: TALK INITIALIZATION SENT
+On: 2011-10-18 20:01:11.390843 Event: RECEIVER READY SENT
+On: 2011-10-18 20:01:15.093818 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-10-18 20:01:42.448428 ------------------
+On: 2011-10-18 20:01:42.448569 Event: LISTEN ON PORT: 34930
+On: 2011-10-18 20:01:43.753353 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 36177)
+On: 2011-10-18 20:01:43.753773 Event: TALK INITIALIZATION SENT
+On: 2011-10-18 20:01:43.754012 Event: RECEIVER READY SENT
+On: 2011-10-18 20:01:53.905834 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-10-20 11:57:09.980009 ------------------
+On: 2011-10-20 11:57:09.980149 Event: LISTEN ON PORT: 49223
+On: 2011-10-20 11:57:10.736979 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 39911)
+On: 2011-10-20 11:57:10.737381 Event: TALK INITIALIZATION SENT
+On: 2011-10-20 11:57:10.737594 Event: CALLER READY SENT
+
+
+------------------STARTED THE LOGGING 2011-10-20 11:58:53.418808 ------------------
+On: 2011-10-20 11:58:53.418944 Event: LISTEN ON PORT: 52241
+On: 2011-10-20 11:58:53.818757 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 57301)
+On: 2011-10-20 11:58:53.819152 Event: TALK INITIALIZATION SENT
+On: 2011-10-20 11:58:53.819355 Event: CALLER READY SENT
+
+
+------------------STARTED THE LOGGING 2011-10-20 12:00:04.671154 ------------------
+On: 2011-10-20 12:00:04.671290 Event: LISTEN ON PORT: 57880
+On: 2011-10-20 12:00:05.962238 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 39303)
+On: 2011-10-20 12:00:05.962638 Event: TALK INITIALIZATION SENT
+On: 2011-10-20 12:00:05.962841 Event: CALLER READY SENT
+On: 2011-10-20 12:00:32.698491 Event: CALLER STATUS SENT
+On: 2011-10-20 12:00:32.698746 Event: other appeared
+
+
+------------------STARTED THE LOGGING 2011-10-20 12:00:50.303813 ------------------
+On: 2011-10-20 12:00:50.303958 Event: LISTEN ON PORT: 40946
+On: 2011-10-20 12:00:51.621247 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 52738)
+On: 2011-10-20 12:00:51.621650 Event: TALK INITIALIZATION SENT
+On: 2011-10-20 12:00:51.621961 Event: CALLER READY SENT
+On: 2011-10-20 12:01:18.334518 Event: CALLER STATUS SENT
+On: 2011-10-20 12:01:18.334778 Event: other appeared
+
+
+------------------STARTED THE LOGGING 2011-10-20 12:30:31.456740 ------------------
+On: 2011-10-20 12:30:31.456879 Event: LISTEN ON PORT: 37159
+On: 2011-10-20 12:30:32.797195 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 59045)
+On: 2011-10-20 12:30:32.797560 Event: TALK INITIALIZATION SENT
+On: 2011-10-20 12:30:32.797798 Event: CALLER READY SENT
+On: 2011-10-20 12:30:38.413836 Event: CALLER STATUS SENT
+
+
+------------------STARTED THE LOGGING 2011-10-20 12:41:39.081381 ------------------
+On: 2011-10-20 12:41:39.081527 Event: LISTEN ON PORT: 44652
+On: 2011-10-20 12:41:40.320459 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 60598)
+On: 2011-10-20 12:41:40.320838 Event: TALK INITIALIZATION SENT
+On: 2011-10-20 12:41:40.321043 Event: CALLER READY SENT
+On: 2011-10-20 12:41:52.018495 Event: CALLER STATUS SENT
+
+
+------------------STARTED THE LOGGING 2011-10-20 12:49:18.640747 ------------------
+On: 2011-10-20 12:49:18.640958 Event: LISTEN ON PORT: 45533
+On: 2011-10-20 12:49:19.928742 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 56241)
+On: 2011-10-20 12:49:19.929112 Event: TALK INITIALIZATION SENT
+On: 2011-10-20 12:49:19.929319 Event: CALLER READY SENT
+On: 2011-10-20 12:49:25.781855 Event: CALLER STATUS SENT
+
+
+------------------STARTED THE LOGGING 2011-10-20 13:05:16.708763 ------------------
+On: 2011-10-20 13:05:16.708899 Event: LISTEN ON PORT: 55240
+On: 2011-10-20 13:05:18.043456 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 38950)
+On: 2011-10-20 13:05:18.043830 Event: TALK INITIALIZATION SENT
+On: 2011-10-20 13:05:18.044034 Event: CALLER READY SENT
+On: 2011-10-20 13:05:23.811717 Event: CALLER STATUS SENT
+
+
+------------------STARTED THE LOGGING 2011-10-20 13:34:03.330386 ------------------
+On: 2011-10-20 13:34:03.330524 Event: LISTEN ON PORT: 53483
+On: 2011-10-20 13:34:04.658189 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 41497)
+On: 2011-10-20 13:34:04.658565 Event: TALK INITIALIZATION SENT
+On: 2011-10-20 13:34:04.658770 Event: CALLER READY SENT
+On: 2011-10-20 13:34:10.305841 Event: CALLER STATUS SENT
+
+
+------------------STARTED THE LOGGING 2011-10-20 13:51:59.841097 ------------------
+On: 2011-10-20 13:51:59.841233 Event: LISTEN ON PORT: 58346
+On: 2011-10-20 13:52:01.159135 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 54449)
+On: 2011-10-20 13:52:01.159509 Event: TALK INITIALIZATION SENT
+On: 2011-10-20 13:52:01.159716 Event: CALLER READY SENT
+On: 2011-10-20 13:52:07.357907 Event: CALLER STATUS SENT
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:09:03.689547 ------------------
+On: 2011-10-20 14:09:03.689679 Event: LISTEN ON PORT: 34731
+On: 2011-10-20 14:09:05.008758 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 48677)
+On: 2011-10-20 14:09:05.009139 Event: TALK INITIALIZATION SENT
+On: 2011-10-20 14:09:05.009345 Event: RECEIVER READY SENT
+On: 2011-10-20 14:09:09.998526 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:14:46.404020 ------------------
+On: 2011-10-20 14:14:46.404157 Event: LISTEN ON PORT: 38495
+On: 2011-10-20 14:14:47.697162 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 42228)
+On: 2011-10-20 14:14:47.697541 Event: TALK INITIALIZATION SENT
+On: 2011-10-20 14:14:47.697788 Event: RECEIVER READY SENT
+On: 2011-10-20 14:14:53.686470 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:20:29.743807 ------------------
+On: 2011-10-20 14:20:29.743943 Event: LISTEN ON PORT: 48213
+On: 2011-10-20 14:20:31.067612 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 42232)
+On: 2011-10-20 14:20:31.067988 Event: TALK INITIALIZATION SENT
+On: 2011-10-20 14:20:31.068193 Event: CALLER READY SENT
+On: 2011-10-20 14:20:42.682496 Event: CALLER STATUS SENT
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:25:31.069394 ------------------
+On: 2011-10-20 14:25:31.069529 Event: LISTEN ON PORT: 34176
+On: 2011-10-20 14:25:32.404043 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 35780)
+On: 2011-10-20 14:25:32.404395 Event: TALK INITIALIZATION SENT
+On: 2011-10-20 14:25:32.404597 Event: CALLER READY SENT
+On: 2011-10-20 14:25:38.085825 Event: CALLER STATUS SENT
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:28:25.860816 ------------------
+On: 2011-10-20 14:28:25.860951 Event: LISTEN ON PORT: 33796
+On: 2011-10-20 14:28:27.170435 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 35285)
+On: 2011-10-20 14:28:27.170804 Event: TALK INITIALIZATION SENT
+On: 2011-10-20 14:28:27.171004 Event: RECEIVER READY SENT
+On: 2011-10-20 14:28:32.770461 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:28:37.520404 ------------------
+On: 2011-10-20 14:28:37.520541 Event: LISTEN ON PORT: 45029
+On: 2011-10-20 14:28:38.830169 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 49457)
+On: 2011-10-20 14:28:38.830575 Event: TALK INITIALIZATION SENT
+On: 2011-10-20 14:28:38.830788 Event: CALLER READY SENT
+On: 2011-10-20 14:28:49.450513 Event: CALLER STATUS SENT
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:32:16.308611 ------------------
+On: 2011-10-20 14:32:16.308755 Event: LISTEN ON PORT: 52675
+On: 2011-10-20 14:32:17.605780 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 50634)
+On: 2011-10-20 14:32:17.606164 Event: TALK INITIALIZATION SENT
+On: 2011-10-20 14:32:17.606359 Event: RECEIVER READY SENT
+On: 2011-10-20 14:32:24.186524 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:35:32.871572 ------------------
+On: 2011-10-20 14:35:32.871706 Event: LISTEN ON PORT: 45604
+On: 2011-10-20 14:35:34.211861 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 54135)
+On: 2011-10-20 14:35:34.212239 Event: TALK INITIALIZATION SENT
+On: 2011-10-20 14:35:34.212439 Event: RECEIVER READY SENT
+On: 2011-10-20 14:35:38.789939 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:39:12.558872 ------------------
+On: 2011-10-20 14:39:12.559005 Event: LISTEN ON PORT: 57139
+On: 2011-10-20 14:39:13.899359 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 49090)
+On: 2011-10-20 14:39:13.899730 Event: TALK INITIALIZATION SENT
+On: 2011-10-20 14:39:13.899936 Event: CALLER READY SENT
+On: 2011-10-20 14:39:20.085837 Event: CALLER STATUS SENT
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:41:51.179139 ------------------
+On: 2011-10-20 14:41:51.179277 Event: LISTEN ON PORT: 52786
+On: 2011-10-20 14:41:52.486903 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 42168)
+On: 2011-10-20 14:41:52.487276 Event: TALK INITIALIZATION SENT
+On: 2011-10-20 14:41:52.487478 Event: RECEIVER READY SENT
+On: 2011-10-20 14:41:58.482454 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:42:03.188583 ------------------
+On: 2011-10-20 14:42:03.188720 Event: LISTEN ON PORT: 56782
+On: 2011-10-20 14:42:04.526459 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 60135)
+On: 2011-10-20 14:42:04.526833 Event: TALK INITIALIZATION SENT
+On: 2011-10-20 14:42:04.527035 Event: CALLER READY SENT
+On: 2011-10-20 14:42:16.230473 Event: CALLER STATUS SENT
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:55:48.981358 ------------------
+On: 2011-10-20 14:55:48.981487 Event: LISTEN ON PORT: 52996
+On: 2011-10-20 14:55:50.315355 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 49839)
+On: 2011-10-20 14:55:50.315719 Event: TALK INITIALIZATION SENT
+On: 2011-10-20 14:55:50.315913 Event: CALLER READY SENT
+On: 2011-10-20 14:55:55.945857 Event: CALLER STATUS SENT
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:58:30.345264 ------------------
+On: 2011-10-20 14:58:30.345399 Event: LISTEN ON PORT: 56297
+On: 2011-10-20 14:58:31.565306 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 49537)
+On: 2011-10-20 14:58:31.565682 Event: TALK INITIALIZATION SENT
+On: 2011-10-20 14:58:31.565943 Event: RECEIVER READY SENT
+On: 2011-10-20 14:58:36.542513 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:58:48.259249 ------------------
+On: 2011-10-20 14:58:48.259386 Event: LISTEN ON PORT: 38907
+On: 2011-10-20 14:58:49.606236 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 50277)
+On: 2011-10-20 14:58:49.606614 Event: TALK INITIALIZATION SENT
+On: 2011-10-20 14:58:49.606817 Event: RECEIVER READY SENT
+On: 2011-10-20 14:58:54.181882 Event: RECEIVE STATUS REPORTED
+
+
+------------------STARTED THE LOGGING 2011-10-20 15:00:12.274651 ------------------
+On: 2011-10-20 15:00:12.274789 Event: LISTEN ON PORT: 38398
+On: 2011-10-20 15:00:13.585063 Event: CONNECTION ESTABLISHED AND DEVICE WORKING: ('127.0.0.1', 54419)
+On: 2011-10-20 15:00:13.585436 Event: TALK INITIALIZATION SENT
+On: 2011-10-20 15:00:13.585640 Event: RECEIVER READY SENT
+On: 2011-10-20 15:00:18.994505 Event: RECEIVE STATUS REPORTED
diff --git a/For Weekly Test/tricode/Landline handler.log b/For Weekly Test/tricode/Landline handler.log
new file mode 100644
index 0000000..8e6319e
--- /dev/null
+++ b/For Weekly Test/tricode/Landline handler.log
@@ -0,0 +1,508 @@
+
+
+------------------STARTED THE LOGGING 2011-10-14 17:09:36.590523 ------------------
+On: 2011-10-14 17:09:36.610786 Event: try to Connect to Controller
+On: 2011-10-14 17:09:37.907265 Event: init state
+On: 2011-10-14 17:09:37.907505 Event: Register Account to SIP server
+On: 2011-10-14 17:09:37.909234 Event: 100
+On: 2011-10-14 17:09:37.911726 Event: Caller Handler Ready
+On: 2011-10-14 17:09:41.916794 Event: Terminate
+On: 2011-10-14 17:09:41.916831 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-14 17:54:35.873056 ------------------
+On: 2011-10-14 17:54:35.894582 Event: try to Connect to Controller
+On: 2011-10-14 17:54:37.176912 Event: init state
+On: 2011-10-14 17:54:37.177185 Event: Register Account to SIP server
+On: 2011-10-14 17:54:37.178874 Event: 100
+On: 2011-10-14 17:54:37.181279 Event: Caller Handler Ready
+On: 2011-10-14 17:54:41.184773 Event: Terminate
+On: 2011-10-14 17:54:41.184810 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-14 17:56:26.718035 ------------------
+On: 2011-10-14 17:56:26.738822 Event: try to Connect to Controller
+On: 2011-10-14 17:56:28.042823 Event: init state
+On: 2011-10-14 17:56:28.043057 Event: Register Account to SIP server
+On: 2011-10-14 17:56:28.044734 Event: 100
+On: 2011-10-14 17:56:28.044829 Event: Caller Handler Ready
+On: 2011-10-14 17:56:32.052672 Event: Terminate
+On: 2011-10-14 17:56:32.052710 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-14 17:58:46.216385 ------------------
+On: 2011-10-14 17:58:46.236740 Event: try to Connect to Controller
+On: 2011-10-14 17:58:47.533023 Event: init state
+On: 2011-10-14 17:58:47.533260 Event: Register Account to SIP server
+On: 2011-10-14 17:58:47.535074 Event: 100
+On: 2011-10-14 17:58:47.535171 Event: Caller Handler Ready
+On: 2011-10-14 17:58:51.540754 Event: Terminate
+On: 2011-10-14 17:58:51.540790 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-14 19:13:57.300596 ------------------
+On: 2011-10-14 19:13:57.321699 Event: try to Connect to Controller
+On: 2011-10-14 19:13:58.650489 Event: init state
+On: 2011-10-14 19:13:58.650739 Event: Register Account to SIP server
+On: 2011-10-14 19:13:58.652831 Event: 100
+On: 2011-10-14 19:13:58.655350 Event: Caller Handler Ready
+On: 2011-10-14 19:14:02.664725 Event: Terminate
+On: 2011-10-14 19:14:02.664764 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-14 19:16:54.438539 ------------------
+On: 2011-10-14 19:16:54.459222 Event: try to Connect to Controller
+On: 2011-10-14 19:16:55.793430 Event: init state
+On: 2011-10-14 19:16:55.793722 Event: Register Account to SIP server
+On: 2011-10-14 19:16:55.795880 Event: 100
+On: 2011-10-14 19:16:55.797031 Event: Caller Handler Ready
+On: 2011-10-14 19:16:59.802440 Event: Terminate
+On: 2011-10-14 19:16:59.802478 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-17 17:15:58.456080 ------------------
+On: 2011-10-17 17:15:58.476264 Event: try to Connect to Controller
+On: 2011-10-17 17:15:59.777790 Event: init state
+On: 2011-10-17 17:15:59.777928 Event: Register Account to SIP server
+On: 2011-10-17 17:15:59.779856 Event: 100
+On: 2011-10-17 17:15:59.782422 Event: Caller Handler Ready
+On: 2011-10-17 17:16:03.786388 Event: Terminate
+On: 2011-10-17 17:16:03.786427 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-17 17:30:19.025425 ------------------
+On: 2011-10-17 17:30:19.045330 Event: try to Connect to Controller
+On: 2011-10-17 17:30:20.342309 Event: init state
+On: 2011-10-17 17:30:20.342547 Event: Register Account to SIP server
+On: 2011-10-17 17:30:20.344911 Event: 100
+On: 2011-10-17 17:30:20.345006 Event: Caller Handler Ready
+On: 2011-10-17 17:30:27.365206 Event: CALL START
+On: 2011-10-17 17:30:27.365265 Event: Make a call to: 07612034661447
+On: 2011-10-17 17:30:30.870213 Event: Call Disconnected
+On: 2011-10-17 17:30:55.364331 Event: Terminate
+On: 2011-10-17 17:30:55.364388 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-17 17:38:49.331013 ------------------
+On: 2011-10-17 17:38:49.351667 Event: try to Connect to Controller
+On: 2011-10-17 17:38:50.624624 Event: init state
+On: 2011-10-17 17:38:50.624875 Event: Register Account to SIP server
+On: 2011-10-17 17:38:50.627469 Event: 100
+On: 2011-10-17 17:38:50.629829 Event: Caller Handler Ready
+On: 2011-10-17 17:38:57.645466 Event: CALL START
+On: 2011-10-17 17:38:57.645524 Event: Make a call to: 07612034661447
+On: 2011-10-17 17:39:01.686294 Event: Call Disconnected
+On: 2011-10-17 17:39:25.645653 Event: Terminate
+On: 2011-10-17 17:39:25.645711 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-17 17:47:08.242835 ------------------
+On: 2011-10-17 17:47:08.262962 Event: try to Connect to Controller
+On: 2011-10-17 17:47:09.463828 Event: init state
+On: 2011-10-17 17:47:09.464066 Event: Register Account to SIP server
+On: 2011-10-17 17:47:09.466587 Event: 100
+On: 2011-10-17 17:47:09.468910 Event: Caller Handler Ready
+On: 2011-10-17 17:47:13.472421 Event: Terminate
+On: 2011-10-17 17:47:13.472458 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-17 17:51:26.581342 ------------------
+On: 2011-10-17 17:51:26.601788 Event: try to Connect to Controller
+On: 2011-10-17 17:51:27.877356 Event: init state
+On: 2011-10-17 17:51:27.877794 Event: Register Account to SIP server
+On: 2011-10-17 17:51:27.880493 Event: 100
+On: 2011-10-17 17:51:27.882919 Event: Caller Handler Ready
+On: 2011-10-17 17:51:34.896450 Event: CALL START
+On: 2011-10-17 17:51:34.896511 Event: Make a call to: 07612034661447
+On: 2011-10-17 17:51:39.760119 Event: Call Disconnected
+On: 2011-10-17 17:52:02.897301 Event: Terminate
+On: 2011-10-17 17:52:02.897351 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-17 18:03:11.336417 ------------------
+On: 2011-10-17 18:03:11.356727 Event: try to Connect to Controller
+On: 2011-10-17 18:03:12.667059 Event: init state
+On: 2011-10-17 18:03:12.667312 Event: Register Account to SIP server
+On: 2011-10-17 18:03:12.669674 Event: 100
+On: 2011-10-17 18:03:12.671976 Event: Caller Handler Ready
+On: 2011-10-17 18:03:16.676445 Event: Terminate
+On: 2011-10-17 18:03:16.676485 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-17 18:10:11.475488 ------------------
+On: 2011-10-17 18:10:11.495245 Event: try to Connect to Controller
+On: 2011-10-17 18:10:12.676099 Event: init state
+On: 2011-10-17 18:10:12.676339 Event: Register Account to SIP server
+On: 2011-10-17 18:10:17.678530 Event: 100
+On: 2011-10-17 18:10:17.680992 Event: Caller Handler Ready
+On: 2011-10-17 18:10:21.684418 Event: Terminate
+On: 2011-10-17 18:10:21.684457 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 12:30:54.590446 ------------------
+On: 2011-10-20 12:30:54.610652 Event: try to Connect to Controller
+On: 2011-10-20 12:30:55.917190 Event: init state
+On: 2011-10-20 12:30:55.917443 Event: Register Account to SIP server
+On: 2011-10-20 12:30:55.922181 Event: 100
+On: 2011-10-20 12:30:55.924569 Event: Caller Handler Ready
+On: 2011-10-20 12:31:05.943139 Event: CALL START
+On: 2011-10-20 12:31:05.943197 Event: Make a call to: 07612034661455
+On: 2011-10-20 12:31:11.296744 Event: Call Disconnected
+On: 2011-10-20 12:31:32.941273 Event: Terminate
+On: 2011-10-20 12:31:32.941330 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 12:41:57.096453 ------------------
+On: 2011-10-20 12:41:57.120972 Event: try to Connect to Controller
+On: 2011-10-20 12:41:58.098717 Event: init state
+On: 2011-10-20 12:41:58.098945 Event: Register Account to SIP server
+On: 2011-10-20 12:41:58.101273 Event: 100
+On: 2011-10-20 12:41:58.103933 Event: Caller Handler Ready
+On: 2011-10-20 12:42:08.127717 Event: CALL START
+On: 2011-10-20 12:42:08.127776 Event: Make a call to: 07612034661447
+On: 2011-10-20 12:42:11.161567 Event: Call Disconnected
+On: 2011-10-20 12:42:35.125560 Event: Terminate
+On: 2011-10-20 12:42:35.125617 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 12:49:41.739449 ------------------
+On: 2011-10-20 12:49:41.760029 Event: try to Connect to Controller
+On: 2011-10-20 12:49:43.022714 Event: init state
+On: 2011-10-20 12:49:43.022959 Event: Register Account to SIP server
+On: 2011-10-20 12:49:43.025260 Event: 100
+On: 2011-10-20 12:49:43.027748 Event: Caller Handler Ready
+On: 2011-10-20 12:49:53.048143 Event: CALL START
+On: 2011-10-20 12:49:53.048212 Event: Make a call to: 07612034661447
+On: 2011-10-20 12:49:56.661047 Event: Call Disconnected
+On: 2011-10-20 12:50:20.046374 Event: Terminate
+On: 2011-10-20 12:50:20.046431 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 12:56:23.099352 ------------------
+On: 2011-10-20 12:56:23.119575 Event: try to Connect to Controller
+On: 2011-10-20 12:56:24.354700 Event: init state
+On: 2011-10-20 12:56:24.354955 Event: Register Account to SIP server
+On: 2011-10-20 12:56:24.357197 Event: 100
+On: 2011-10-20 12:56:24.359713 Event: Caller Handler Ready
+On: 2011-10-20 12:56:34.380476 Event: CALL START
+On: 2011-10-20 12:56:34.380538 Event: Make a call to: 07612034661455
+On: 2011-10-20 12:56:38.115273 Event: Call Disconnected
+On: 2011-10-20 12:57:01.377790 Event: Terminate
+On: 2011-10-20 12:57:01.377836 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 13:05:39.827134 ------------------
+On: 2011-10-20 13:05:39.847531 Event: try to Connect to Controller
+On: 2011-10-20 13:05:41.143653 Event: init state
+On: 2011-10-20 13:05:41.143900 Event: Register Account to SIP server
+On: 2011-10-20 13:05:41.146392 Event: 100
+On: 2011-10-20 13:05:41.148826 Event: Caller Handler Ready
+On: 2011-10-20 13:05:51.167001 Event: CALL START
+On: 2011-10-20 13:05:51.167060 Event: Make a call to: 07612034661455
+On: 2011-10-20 13:05:54.228278 Event: Call Disconnected
+On: 2011-10-20 13:06:18.166426 Event: Terminate
+On: 2011-10-20 13:06:18.166472 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 13:16:42.837943 ------------------
+On: 2011-10-20 13:16:42.859449 Event: try to Connect to Controller
+On: 2011-10-20 13:16:44.078189 Event: init state
+On: 2011-10-20 13:16:44.078440 Event: Register Account to SIP server
+On: 2011-10-20 13:16:44.080898 Event: 100
+On: 2011-10-20 13:16:44.083455 Event: Caller Handler Ready
+On: 2011-10-20 13:16:54.098859 Event: CALL START
+On: 2011-10-20 13:16:54.098918 Event: Make a call to: 07612034661455
+On: 2011-10-20 13:17:15.623823 Event: Call Disconnected
+On: 2011-10-20 13:17:21.096683 Event: Terminate
+On: 2011-10-20 13:17:21.096742 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 13:34:26.657642 ------------------
+On: 2011-10-20 13:34:26.678147 Event: try to Connect to Controller
+On: 2011-10-20 13:34:27.977045 Event: init state
+On: 2011-10-20 13:34:27.977291 Event: Register Account to SIP server
+On: 2011-10-20 13:34:32.983698 Event: 100
+On: 2011-10-20 13:34:32.983790 Event: Caller Handler Ready
+On: 2011-10-20 13:34:43.007573 Event: CALL START
+On: 2011-10-20 13:34:43.007629 Event: Make a call to: 07612034661447
+On: 2011-10-20 13:34:46.397358 Event: Call Disconnected
+On: 2011-10-20 13:35:10.005746 Event: Terminate
+On: 2011-10-20 13:35:10.005804 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 13:52:22.960377 ------------------
+On: 2011-10-20 13:52:22.980870 Event: try to Connect to Controller
+On: 2011-10-20 13:52:24.261115 Event: init state
+On: 2011-10-20 13:52:24.261368 Event: Register Account to SIP server
+On: 2011-10-20 13:52:24.263732 Event: 100
+On: 2011-10-20 13:52:24.266192 Event: Caller Handler Ready
+On: 2011-10-20 13:52:34.280375 Event: CALL START
+On: 2011-10-20 13:52:34.280433 Event: Make a call to: 07612034661455
+On: 2011-10-20 13:52:40.336993 Event: Call Disconnected
+On: 2011-10-20 13:53:01.280027 Event: Terminate
+On: 2011-10-20 13:53:01.280071 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:02:31.979436 ------------------
+On: 2011-10-20 14:02:31.999936 Event: try to Connect to Controller
+On: 2011-10-20 14:02:33.240701 Event: init state
+On: 2011-10-20 14:02:33.240953 Event: Register Account to SIP server
+On: 2011-10-20 14:02:33.243782 Event: 100
+On: 2011-10-20 14:02:33.246254 Event: Caller Handler Ready
+On: 2011-10-20 14:02:43.261454 Event: CALL START
+On: 2011-10-20 14:02:43.261512 Event: Make a call to: 07612034661455
+On: 2011-10-20 14:02:46.638790 Event: Call Disconnected
+On: 2011-10-20 14:03:10.261960 Event: Terminate
+On: 2011-10-20 14:03:10.262017 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:09:42.904626 ------------------
+On: 2011-10-20 14:09:42.925088 Event: try to Connect to Controller
+On: 2011-10-20 14:09:44.158439 Event: init state
+On: 2011-10-20 14:09:44.158669 Event: Register Account to SIP server
+On: 2011-10-20 14:09:44.161029 Event: 100
+On: 2011-10-20 14:09:44.163639 Event: Caller Handler Ready
+On: 2011-10-20 14:09:54.183562 Event: CALL START
+On: 2011-10-20 14:09:54.183621 Event: Make a call to: 07612034661455
+On: 2011-10-20 14:09:59.202122 Event: Call Connecting
+On: 2011-10-20 14:09:59.202169 Event: 200
+On: 2011-10-20 14:09:59.202967 Event: Terminate
+On: 2011-10-20 14:09:59.203024 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:15:26.528121 ------------------
+On: 2011-10-20 14:15:26.548612 Event: try to Connect to Controller
+On: 2011-10-20 14:15:27.845151 Event: init state
+On: 2011-10-20 14:15:27.845391 Event: Register Account to SIP server
+On: 2011-10-20 14:15:27.848500 Event: 100
+On: 2011-10-20 14:15:27.851038 Event: Caller Handler Ready
+On: 2011-10-20 14:15:37.868253 Event: CALL START
+On: 2011-10-20 14:15:37.868310 Event: Make a call to: 07612034661455
+On: 2011-10-20 14:15:42.874584 Event: Call Connecting
+On: 2011-10-20 14:15:42.874631 Event: 200
+On: 2011-10-20 14:15:42.875431 Event: Terminate
+On: 2011-10-20 14:15:42.875490 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:20:47.426333 ------------------
+On: 2011-10-20 14:20:47.446723 Event: try to Connect to Controller
+On: 2011-10-20 14:20:48.733834 Event: init state
+On: 2011-10-20 14:20:48.734098 Event: Register Account to SIP server
+On: 2011-10-20 14:20:48.736267 Event: 100
+On: 2011-10-20 14:20:48.738781 Event: Caller Handler Ready
+On: 2011-10-20 14:20:58.754767 Event: CALL START
+On: 2011-10-20 14:20:58.754825 Event: Make a call to: 07612034661447
+On: 2011-10-20 14:21:13.939704 Event: Call Connecting
+On: 2011-10-20 14:21:13.939754 Event: 200
+On: 2011-10-20 14:21:13.941082 Event: Terminate
+On: 2011-10-20 14:21:13.941139 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:25:54.263456 ------------------
+On: 2011-10-20 14:25:54.283912 Event: try to Connect to Controller
+On: 2011-10-20 14:25:55.504813 Event: init state
+On: 2011-10-20 14:25:55.505064 Event: Register Account to SIP server
+On: 2011-10-20 14:25:55.507243 Event: 100
+On: 2011-10-20 14:25:55.509547 Event: Caller Handler Ready
+On: 2011-10-20 14:26:05.524148 Event: CALL START
+On: 2011-10-20 14:26:05.524203 Event: Make a call to: 07612034661455
+On: 2011-10-20 14:26:11.635526 Event: Call Connecting
+On: 2011-10-20 14:26:11.635575 Event: 200
+On: 2011-10-20 14:26:11.636378 Event: Terminate
+On: 2011-10-20 14:26:11.636435 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:32:57.063337 ------------------
+On: 2011-10-20 14:32:57.083538 Event: try to Connect to Controller
+On: 2011-10-20 14:32:58.344519 Event: init state
+On: 2011-10-20 14:32:58.344771 Event: Register Account to SIP server
+On: 2011-10-20 14:32:58.350649 Event: 100
+On: 2011-10-20 14:32:58.352987 Event: Caller Handler Ready
+On: 2011-10-20 14:33:08.372442 Event: CALL START
+On: 2011-10-20 14:33:08.372500 Event: Make a call to: 07612034661455
+On: 2011-10-20 14:33:14.021105 Event: Call Connecting
+On: 2011-10-20 14:33:14.021154 Event: 200
+On: 2011-10-20 14:33:14.022144 Event: Terminate
+On: 2011-10-20 14:33:14.022202 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:39:35.673426 ------------------
+On: 2011-10-20 14:39:35.694067 Event: try to Connect to Controller
+On: 2011-10-20 14:39:36.995256 Event: init state
+On: 2011-10-20 14:39:36.995507 Event: Register Account to SIP server
+On: 2011-10-20 14:39:36.998226 Event: 100
+On: 2011-10-20 14:39:37.000589 Event: Caller Handler Ready
+On: 2011-10-20 14:39:47.020770 Event: CALL START
+On: 2011-10-20 14:39:47.020830 Event: Make a call to: 07612034661447
+On: 2011-10-20 14:39:55.549182 Event: Call Connecting
+On: 2011-10-20 14:39:55.549230 Event: 200
+On: 2011-10-20 14:39:55.550214 Event: Terminate
+On: 2011-10-20 14:39:55.550274 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:56:12.157340 ------------------
+On: 2011-10-20 14:56:12.177952 Event: try to Connect to Controller
+On: 2011-10-20 14:56:13.416510 Event: init state
+On: 2011-10-20 14:56:13.416753 Event: Register Account to SIP server
+On: 2011-10-20 14:56:13.418785 Event: 100
+On: 2011-10-20 14:56:13.421186 Event: Caller Handler Ready
+On: 2011-10-20 14:56:23.435824 Event: CALL START
+On: 2011-10-20 14:56:23.435881 Event: Make a call to: 07612034661447
+On: 2011-10-20 14:56:34.135425 Event: Call Connecting
+On: 2011-10-20 14:56:34.135474 Event: 200
+On: 2011-10-20 14:56:34.136267 Event: Terminate
+On: 2011-10-20 14:56:34.136323 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 15:00:51.898638 ------------------
+On: 2011-10-20 15:00:51.918777 Event: try to Connect to Controller
+On: 2011-10-20 15:00:53.149693 Event: init state
+On: 2011-10-20 15:00:53.150173 Event: Register Account to SIP server
+On: 2011-10-20 15:00:53.152357 Event: 100
+On: 2011-10-20 15:00:53.154956 Event: Caller Handler Ready
+On: 2011-10-20 15:01:03.173662 Event: CALL START
+On: 2011-10-20 15:01:03.173738 Event: Make a call to: 07612034661455
+On: 2011-10-20 15:01:10.547274 Event: Call Connecting
+On: 2011-10-20 15:01:10.547324 Event: 200
+On: 2011-10-20 15:01:10.548121 Event: Terminate
+On: 2011-10-20 15:01:10.548178 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 15:16:55.007734 ------------------
+On: 2011-10-20 15:16:55.028200 Event: try to Connect to Controller
+On: 2011-10-20 15:16:55.932919 Event: init state
+On: 2011-10-20 15:16:55.933179 Event: Register Account to SIP server
+On: 2011-10-20 15:16:55.941228 Event: 100
+On: 2011-10-20 15:16:55.943652 Event: Caller Handler Ready
+On: 2011-10-20 15:17:05.962718 Event: CALL START
+On: 2011-10-20 15:17:05.962778 Event: Make a call to: 07612034661455
+On: 2011-10-20 15:17:12.586728 Event: Call Connecting
+On: 2011-10-20 15:17:12.586777 Event: 200
+On: 2011-10-20 15:17:12.587590 Event: Terminate
+On: 2011-10-20 15:17:12.587645 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 15:23:45.181529 ------------------
+On: 2011-10-20 15:23:45.202254 Event: try to Connect to Controller
+On: 2011-10-20 15:23:46.481925 Event: init state
+On: 2011-10-20 15:23:46.482179 Event: Register Account to SIP server
+On: 2011-10-20 15:23:46.484726 Event: 100
+On: 2011-10-20 15:23:46.487182 Event: Caller Handler Ready
+On: 2011-10-20 15:23:56.501744 Event: CALL START
+On: 2011-10-20 15:23:56.501809 Event: Make a call to: 07612034661447
+On: 2011-10-20 15:24:02.066756 Event: Call Connecting
+On: 2011-10-20 15:24:02.066805 Event: 200
+On: 2011-10-20 15:24:02.067621 Event: Terminate
+On: 2011-10-20 15:24:02.067679 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 16:03:10.891536 ------------------
+On: 2011-10-20 16:03:10.912278 Event: try to Connect to Controller
+On: 2011-10-20 16:03:12.148924 Event: init state
+On: 2011-10-20 16:03:12.149177 Event: Register Account to SIP server
+On: 2011-10-20 16:03:12.151616 Event: 100
+On: 2011-10-20 16:03:12.154033 Event: Caller Handler Ready
+On: 2011-10-20 16:03:22.169783 Event: CALL START
+On: 2011-10-20 16:03:22.169854 Event: Make a call to: 07612034661447
+On: 2011-10-20 16:03:27.612704 Event: Call Connecting
+On: 2011-10-20 16:03:27.612754 Event: 200
+On: 2011-10-20 16:03:27.614156 Event: Terminate
+On: 2011-10-20 16:03:27.614214 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 16:07:32.136698 ------------------
+On: 2011-10-20 16:07:32.157494 Event: try to Connect to Controller
+On: 2011-10-20 16:07:33.401059 Event: init state
+On: 2011-10-20 16:07:33.401303 Event: Register Account to SIP server
+On: 2011-10-20 16:07:33.438577 Event: 100
+On: 2011-10-20 16:07:33.441041 Event: Caller Handler Ready
+On: 2011-10-20 16:07:43.457108 Event: CALL START
+On: 2011-10-20 16:07:43.457168 Event: Make a call to: 07612034661447
+On: 2011-10-20 16:07:47.681207 Event: Call Connecting
+On: 2011-10-20 16:07:47.681257 Event: 200
+On: 2011-10-20 16:07:47.682646 Event: Terminate
+On: 2011-10-20 16:07:47.682705 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 16:13:43.076802 ------------------
+On: 2011-10-20 16:13:43.097058 Event: try to Connect to Controller
+On: 2011-10-20 16:13:44.350635 Event: init state
+On: 2011-10-20 16:13:44.350885 Event: Register Account to SIP server
+On: 2011-10-20 16:13:44.352530 Event: 100
+On: 2011-10-20 16:13:44.355127 Event: Caller Handler Ready
+On: 2011-10-20 16:13:54.372286 Event: CALL START
+On: 2011-10-20 16:13:54.372346 Event: Make a call to: 07612034661455
+On: 2011-10-20 16:13:59.525734 Event: Call Connecting
+On: 2011-10-20 16:13:59.525784 Event: 200
+On: 2011-10-20 16:13:59.526615 Event: Terminate
+On: 2011-10-20 16:13:59.526672 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 16:17:38.771969 ------------------
+On: 2011-10-20 16:17:38.792338 Event: try to Connect to Controller
+On: 2011-10-20 16:17:40.026281 Event: init state
+On: 2011-10-20 16:17:40.026537 Event: Register Account to SIP server
+On: 2011-10-20 16:17:40.028720 Event: 100
+On: 2011-10-20 16:17:40.031341 Event: Caller Handler Ready
+On: 2011-10-20 16:17:50.047085 Event: CALL START
+On: 2011-10-20 16:17:50.047148 Event: Make a call to: 07612034661455
+On: 2011-10-20 16:17:59.425782 Event: Call Connecting
+On: 2011-10-20 16:17:59.425852 Event: 200
+On: 2011-10-20 16:17:59.427179 Event: Terminate
+On: 2011-10-20 16:17:59.427235 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 16:44:03.749552 ------------------
+On: 2011-10-20 16:44:03.770707 Event: try to Connect to Controller
+On: 2011-10-20 16:44:04.950853 Event: init state
+On: 2011-10-20 16:44:04.951163 Event: Register Account to SIP server
+On: 2011-10-20 16:44:04.953297 Event: 100
+On: 2011-10-20 16:44:04.955801 Event: Caller Handler Ready
+On: 2011-10-20 16:44:14.977083 Event: CALL START
+On: 2011-10-20 16:44:14.977142 Event: Make a call to: 07612034661455
+On: 2011-10-20 16:44:20.167837 Event: Call Connecting
+On: 2011-10-20 16:44:20.167887 Event: 200
+On: 2011-10-20 16:44:20.169220 Event: Terminate
+On: 2011-10-20 16:44:20.169277 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 16:48:05.367912 ------------------
+On: 2011-10-20 16:48:05.388565 Event: try to Connect to Controller
+On: 2011-10-20 16:48:06.619343 Event: init state
+On: 2011-10-20 16:48:06.619619 Event: Register Account to SIP server
+On: 2011-10-20 16:48:06.621629 Event: 100
+On: 2011-10-20 16:48:06.624075 Event: Caller Handler Ready
+On: 2011-10-20 16:48:16.642348 Event: CALL START
+On: 2011-10-20 16:48:16.642408 Event: Make a call to: 07612034661447
+On: 2011-10-20 16:48:21.567297 Event: Call Connecting
+On: 2011-10-20 16:48:21.567346 Event: 200
+On: 2011-10-20 16:48:21.568672 Event: Terminate
+On: 2011-10-20 16:48:21.568730 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 16:52:03.755170 ------------------
+On: 2011-10-20 16:52:03.776426 Event: try to Connect to Controller
+On: 2011-10-20 16:52:05.066312 Event: init state
+On: 2011-10-20 16:52:05.066543 Event: Register Account to SIP server
+On: 2011-10-20 16:52:05.068863 Event: 100
+On: 2011-10-20 16:52:05.068959 Event: Caller Handler Ready
+On: 2011-10-20 16:52:15.090436 Event: CALL START
+On: 2011-10-20 16:52:15.090502 Event: Make a call to: 07612034661447
+On: 2011-10-20 16:52:25.230699 Event: Call Connecting
+On: 2011-10-20 16:52:25.230750 Event: 200
+On: 2011-10-20 16:52:25.232055 Event: Terminate
+On: 2011-10-20 16:52:25.232112 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 16:55:12.102282 ------------------
+On: 2011-10-20 16:55:12.123024 Event: try to Connect to Controller
+On: 2011-10-20 16:55:13.398396 Event: init state
+On: 2011-10-20 16:55:13.398633 Event: Register Account to SIP server
+On: 2011-10-20 16:55:13.400753 Event: 100
+On: 2011-10-20 16:55:13.400845 Event: Caller Handler Ready
+On: 2011-10-20 16:55:23.419572 Event: CALL START
+On: 2011-10-20 16:55:23.419631 Event: Make a call to: 07612034661447
+On: 2011-10-20 16:55:28.915918 Event: Call Connecting
+On: 2011-10-20 16:55:28.915969 Event: 200
+On: 2011-10-20 16:55:28.917252 Event: Terminate
+On: 2011-10-20 16:55:28.917310 Event: Goodbye
diff --git a/For Weekly Test/tricode/LogFileClass.py b/For Weekly Test/tricode/LogFileClass.py
new file mode 100755
index 0000000..cb152f4
--- /dev/null
+++ b/For Weekly Test/tricode/LogFileClass.py
@@ -0,0 +1,21 @@
+import string
+import datetime
+
+class Logging:
+
+ def __init__(self, logFileName):
+ self.writeToFile = open(logFileName, 'a')
+ self.justStarted = 1
+
+ def logEvent(self, event):
+ now = str(datetime.datetime.now())
+ if self.justStarted == 1:
+ self.writeToFile.write('\n\n------------------STARTED THE LOGGING '+ now + ' ------------------\n')
+ self.justStarted = 0
+ else:
+ self.writeToFile.write('On: '+ now + '\t' + 'Event: ' +str(event) + '\n')
+
+ def closeLogging(self):
+ now = str(datetime.datetime.now())
+ self.writeToFile.write('------------------FINISHED THE LOGGING '+ now + ' ------------------')
+ self.writeToFile.close()
diff --git a/For Weekly Test/tricode/LogFileClass.pyc b/For Weekly Test/tricode/LogFileClass.pyc
new file mode 100644
index 0000000..bbef17d
--- /dev/null
+++ b/For Weekly Test/tricode/LogFileClass.pyc
Binary files differ
diff --git a/For Weekly Test/tricode/PingClass.py b/For Weekly Test/tricode/PingClass.py
new file mode 100755
index 0000000..e13b32b
--- /dev/null
+++ b/For Weekly Test/tricode/PingClass.py
@@ -0,0 +1,28 @@
+import subprocess
+import string
+
+class Ping:
+
+ def __init__(self, pingAddress):
+ self.pingAddress = pingAddress
+
+ def ping(self,numberTries):
+ tried = 1
+ while numberTries >= tried:
+ tried += 1
+ #the parameter c 1 means only one ping to be sent, parameter W 3 means how many seconds the time out should be, 3 seconds
+ ping_cmd = subprocess.Popen(['ping', self.pingAddress, '-c', '1', '-W', '2'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT).communicate()[0]
+
+ pingAlive = int(string.find(ping_cmd, '1 received'))
+ unknownHost = int(string.find(ping_cmd, 'unknown host'))
+
+
+ if pingAlive != -1:
+ break
+
+ if unknownHost != -1:
+ return 2 #unknown host
+ if pingAlive != -1:
+ return 1 #ping works fine
+ else:
+ return 0 #no ping response
diff --git a/For Weekly Test/tricode/PingClass.pyc b/For Weekly Test/tricode/PingClass.pyc
new file mode 100644
index 0000000..d06e20e
--- /dev/null
+++ b/For Weekly Test/tricode/PingClass.pyc
Binary files differ
diff --git a/For Weekly Test/tricode/SIP handler.log b/For Weekly Test/tricode/SIP handler.log
new file mode 100644
index 0000000..b8069b2
--- /dev/null
+++ b/For Weekly Test/tricode/SIP handler.log
@@ -0,0 +1,3225 @@
+
+
+------------------STARTED THE LOGGING 2011-10-14 17:09:46.636460 ------------------
+On: 2011-10-14 17:09:46.657136 Event: try to Connect to Controller
+On: 2011-10-14 17:09:47.961095 Event: init state
+On: 2011-10-14 17:09:47.961321 Event: Register Account to SIP server
+On: 2011-10-14 17:09:47.961739 Event: 100
+On: 2011-10-14 17:09:47.961871 Event: Caller Handler Ready
+On: 2011-10-14 17:09:52.969803 Event: CALL START
+On: 2011-10-14 17:09:52.969863 Event: Make a call to: 015782677224
+On: 2011-10-14 17:10:04.629306 Event: Call Connecting
+On: 2011-10-14 17:10:04.629356 Event: 200
+On: 2011-10-14 17:10:04.633907 Event: Terminate
+On: 2011-10-14 17:10:04.633966 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-14 17:10:09.360723 ------------------
+On: 2011-10-14 17:10:09.381097 Event: try to Connect to Controller
+On: 2011-10-14 17:10:10.677033 Event: init state
+On: 2011-10-14 17:10:10.677272 Event: Register Account to SIP server
+On: 2011-10-14 17:10:10.677699 Event: 100
+On: 2011-10-14 17:10:10.677820 Event: Caller Handler Ready
+On: 2011-10-14 17:10:15.685800 Event: CALL START
+On: 2011-10-14 17:10:15.685857 Event: Make a call to: 017678038038
+On: 2011-10-14 17:10:18.495676 Event: Call Connecting
+On: 2011-10-14 17:10:18.495723 Event: 200
+On: 2011-10-14 17:10:27.683426 Event: Terminate
+On: 2011-10-14 17:10:27.683466 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-14 17:10:32.462526 ------------------
+On: 2011-10-14 17:10:32.483232 Event: try to Connect to Controller
+On: 2011-10-14 17:10:33.765729 Event: init state
+On: 2011-10-14 17:10:33.766069 Event: Register Account to SIP server
+On: 2011-10-14 17:10:33.766858 Event: 100
+On: 2011-10-14 17:10:33.766945 Event: Caller Handler Ready
+On: 2011-10-14 17:10:38.773808 Event: CALL START
+On: 2011-10-14 17:10:38.773867 Event: Make a call to: 015128040906
+On: 2011-10-14 17:10:50.198003 Event: Call Connecting
+On: 2011-10-14 17:10:50.198052 Event: 200
+On: 2011-10-14 17:10:50.201957 Event: Terminate
+On: 2011-10-14 17:10:50.202013 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-14 17:10:54.936512 ------------------
+On: 2011-10-14 17:10:54.957090 Event: try to Connect to Controller
+On: 2011-10-14 17:10:56.245390 Event: init state
+On: 2011-10-14 17:10:56.245630 Event: Register Account to SIP server
+On: 2011-10-14 17:10:56.246463 Event: 100
+On: 2011-10-14 17:10:56.246551 Event: Caller Handler Ready
+On: 2011-10-14 17:11:01.253803 Event: CALL START
+On: 2011-10-14 17:11:01.253863 Event: Make a call to: 015252423662
+On: 2011-10-14 17:11:04.075325 Event: Call Connecting
+On: 2011-10-14 17:11:04.075374 Event: 200
+On: 2011-10-14 17:11:13.251721 Event: Terminate
+On: 2011-10-14 17:11:13.251761 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-14 17:11:18.042969 ------------------
+On: 2011-10-14 17:11:18.063549 Event: try to Connect to Controller
+On: 2011-10-14 17:11:19.341116 Event: init state
+On: 2011-10-14 17:11:19.341353 Event: Register Account to SIP server
+On: 2011-10-14 17:11:19.341826 Event: 100
+On: 2011-10-14 17:11:19.341911 Event: Caller Handler Ready
+On: 2011-10-14 17:11:23.348784 Event: Terminate
+On: 2011-10-14 17:11:23.348821 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-14 17:54:45.929341 ------------------
+On: 2011-10-14 17:54:45.950533 Event: try to Connect to Controller
+On: 2011-10-14 17:54:47.233014 Event: init state
+On: 2011-10-14 17:54:47.233278 Event: Register Account to SIP server
+On: 2011-10-14 17:54:47.233685 Event: 100
+On: 2011-10-14 17:54:47.233764 Event: Caller Handler Ready
+On: 2011-10-14 17:54:52.244885 Event: CALL START
+On: 2011-10-14 17:54:52.244944 Event: Make a call to: 017678038038
+On: 2011-10-14 17:54:55.028083 Event: Call Connecting
+On: 2011-10-14 17:54:55.028132 Event: 200
+On: 2011-10-14 17:55:05.240472 Event: Terminate
+On: 2011-10-14 17:55:05.240512 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-14 17:55:09.996293 ------------------
+On: 2011-10-14 17:55:10.016902 Event: try to Connect to Controller
+On: 2011-10-14 17:55:11.314844 Event: init state
+On: 2011-10-14 17:55:11.315069 Event: Register Account to SIP server
+On: 2011-10-14 17:55:11.315848 Event: 100
+On: 2011-10-14 17:55:11.315932 Event: Caller Handler Ready
+On: 2011-10-14 17:55:16.325824 Event: CALL START
+On: 2011-10-14 17:55:16.325886 Event: Make a call to: 015128040906
+On: 2011-10-14 17:55:27.226235 Event: Call Connecting
+On: 2011-10-14 17:55:27.226285 Event: 200
+On: 2011-10-14 17:55:27.229949 Event: Terminate
+On: 2011-10-14 17:55:27.230009 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-14 17:55:32.392005 ------------------
+On: 2011-10-14 17:55:32.443227 Event: try to Connect to Controller
+On: 2011-10-14 17:55:33.300758 Event: init state
+On: 2011-10-14 17:55:33.300986 Event: Register Account to SIP server
+On: 2011-10-14 17:55:33.301399 Event: 100
+On: 2011-10-14 17:55:33.301484 Event: Caller Handler Ready
+On: 2011-10-14 17:55:38.311987 Event: CALL START
+On: 2011-10-14 17:55:38.312053 Event: Make a call to: 015252423662
+On: 2011-10-14 17:55:47.779197 Event: Call Connecting
+On: 2011-10-14 17:55:47.779246 Event: 200
+On: 2011-10-14 17:55:47.783761 Event: Terminate
+On: 2011-10-14 17:55:47.783819 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-14 17:55:52.611246 ------------------
+On: 2011-10-14 17:55:52.650468 Event: try to Connect to Controller
+On: 2011-10-14 17:55:53.832742 Event: init state
+On: 2011-10-14 17:55:53.832968 Event: Register Account to SIP server
+On: 2011-10-14 17:55:53.833384 Event: 100
+On: 2011-10-14 17:55:53.833467 Event: Caller Handler Ready
+On: 2011-10-14 17:55:55.846416 Event: Terminate
+On: 2011-10-14 17:55:55.846453 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-14 17:56:36.775397 ------------------
+On: 2011-10-14 17:56:36.795759 Event: try to Connect to Controller
+On: 2011-10-14 17:56:38.097164 Event: init state
+On: 2011-10-14 17:56:38.097393 Event: Register Account to SIP server
+On: 2011-10-14 17:56:38.097862 Event: 100
+On: 2011-10-14 17:56:38.097950 Event: Caller Handler Ready
+On: 2011-10-14 17:56:43.106143 Event: CALL START
+On: 2011-10-14 17:56:43.106211 Event: Make a call to: 015782677224
+On: 2011-10-14 17:56:53.696081 Event: Call Connecting
+On: 2011-10-14 17:56:53.696130 Event: 200
+On: 2011-10-14 17:56:53.700618 Event: Terminate
+On: 2011-10-14 17:56:53.700677 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-14 17:56:58.426964 ------------------
+On: 2011-10-14 17:56:58.447568 Event: try to Connect to Controller
+On: 2011-10-14 17:56:59.742432 Event: init state
+On: 2011-10-14 17:56:59.742661 Event: Register Account to SIP server
+On: 2011-10-14 17:56:59.743073 Event: 100
+On: 2011-10-14 17:56:59.743157 Event: Caller Handler Ready
+On: 2011-10-14 17:57:04.749801 Event: CALL START
+On: 2011-10-14 17:57:04.749855 Event: Make a call to: 015128040906
+On: 2011-10-14 17:57:16.572462 Event: Call Connecting
+On: 2011-10-14 17:57:16.572510 Event: 200
+On: 2011-10-14 17:57:16.576938 Event: Terminate
+On: 2011-10-14 17:57:16.576995 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-14 17:57:21.305063 ------------------
+On: 2011-10-14 17:57:21.325519 Event: try to Connect to Controller
+On: 2011-10-14 17:57:22.619651 Event: init state
+On: 2011-10-14 17:57:22.619874 Event: Register Account to SIP server
+On: 2011-10-14 17:57:22.620283 Event: 100
+On: 2011-10-14 17:57:22.620368 Event: Caller Handler Ready
+On: 2011-10-14 17:57:27.629651 Event: CALL START
+On: 2011-10-14 17:57:27.629707 Event: Make a call to: 015252423662
+On: 2011-10-14 17:57:38.117497 Event: Call Connecting
+On: 2011-10-14 17:57:38.117547 Event: 200
+On: 2011-10-14 17:57:38.121937 Event: Terminate
+On: 2011-10-14 17:57:38.121997 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-14 17:57:42.847219 ------------------
+On: 2011-10-14 17:57:42.869064 Event: try to Connect to Controller
+On: 2011-10-14 17:57:44.164184 Event: init state
+On: 2011-10-14 17:57:44.164415 Event: Register Account to SIP server
+On: 2011-10-14 17:57:44.164832 Event: 100
+On: 2011-10-14 17:57:44.164920 Event: Caller Handler Ready
+On: 2011-10-14 17:57:48.170663 Event: Terminate
+On: 2011-10-14 17:57:48.170702 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-14 17:58:56.267915 ------------------
+On: 2011-10-14 17:58:56.288551 Event: try to Connect to Controller
+On: 2011-10-14 17:58:57.586794 Event: init state
+On: 2011-10-14 17:58:57.587025 Event: Register Account to SIP server
+On: 2011-10-14 17:58:57.587446 Event: 100
+On: 2011-10-14 17:58:57.587531 Event: Caller Handler Ready
+On: 2011-10-14 17:59:02.593799 Event: CALL START
+On: 2011-10-14 17:59:02.593853 Event: Make a call to: 015782677224
+On: 2011-10-14 17:59:12.108510 Event: Call Connecting
+On: 2011-10-14 17:59:12.108560 Event: 200
+On: 2011-10-14 17:59:12.112976 Event: Terminate
+On: 2011-10-14 17:59:12.113032 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-14 17:59:16.841714 ------------------
+On: 2011-10-14 17:59:16.863182 Event: try to Connect to Controller
+On: 2011-10-14 17:59:18.154611 Event: init state
+On: 2011-10-14 17:59:18.154848 Event: Register Account to SIP server
+On: 2011-10-14 17:59:18.155261 Event: 100
+On: 2011-10-14 17:59:18.155345 Event: Caller Handler Ready
+On: 2011-10-14 17:59:23.163593 Event: CALL START
+On: 2011-10-14 17:59:23.163650 Event: Make a call to: 017678038038
+On: 2011-10-14 17:59:25.669296 Event: Call Connecting
+On: 2011-10-14 17:59:25.669345 Event: 200
+On: 2011-10-14 17:59:46.162168 Event: Terminate
+On: 2011-10-14 17:59:46.162206 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-14 17:59:50.919087 ------------------
+On: 2011-10-14 17:59:50.940260 Event: try to Connect to Controller
+On: 2011-10-14 17:59:52.234824 Event: init state
+On: 2011-10-14 17:59:52.235054 Event: Register Account to SIP server
+On: 2011-10-14 17:59:52.235475 Event: 100
+On: 2011-10-14 17:59:52.235560 Event: Caller Handler Ready
+On: 2011-10-14 17:59:57.241801 Event: CALL START
+On: 2011-10-14 17:59:57.241854 Event: Make a call to: 015128040906
+On: 2011-10-14 18:00:12.036109 Event: Call Connecting
+On: 2011-10-14 18:00:12.036159 Event: 200
+On: 2011-10-14 18:00:12.040570 Event: Terminate
+On: 2011-10-14 18:00:12.040629 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-14 18:00:16.761732 ------------------
+On: 2011-10-14 18:00:16.782092 Event: try to Connect to Controller
+On: 2011-10-14 18:00:18.083451 Event: init state
+On: 2011-10-14 18:00:18.083677 Event: Register Account to SIP server
+On: 2011-10-14 18:00:18.084089 Event: 100
+On: 2011-10-14 18:00:18.084176 Event: Caller Handler Ready
+On: 2011-10-14 18:00:20.094295 Event: Terminate
+On: 2011-10-14 18:00:20.094333 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-14 18:30:38.450417 ------------------
+On: 2011-10-14 18:30:38.470548 Event: try to Connect to Controller
+On: 2011-10-14 18:30:39.660564 Event: init state
+On: 2011-10-14 18:30:39.660799 Event: Register Account to SIP server
+On: 2011-10-14 18:30:39.661224 Event: 100
+On: 2011-10-14 18:30:39.661308 Event: Caller Handler Ready
+On: 2011-10-14 18:30:46.683607 Event: CALL START
+On: 2011-10-14 18:30:46.683666 Event: Make a call to: 07612034661455
+On: 2011-10-14 18:30:46.714123 Event: Number busy or Offline
+On: 2011-10-14 18:30:46.714229 Event: CALL NOT OK
+On: 2011-10-14 18:30:46.714290 Event: Call Disconnected
+On: 2011-10-14 18:30:59.685936 Event: Terminate
+On: 2011-10-14 18:30:59.685996 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-14 18:33:08.266213 ------------------
+On: 2011-10-14 18:33:08.287252 Event: try to Connect to Controller
+On: 2011-10-14 18:33:09.582716 Event: init state
+On: 2011-10-14 18:33:09.582954 Event: Register Account to SIP server
+On: 2011-10-14 18:33:09.583371 Event: 100
+On: 2011-10-14 18:33:09.583457 Event: Caller Handler Ready
+On: 2011-10-14 18:33:16.601855 Event: CALL START
+On: 2011-10-14 18:33:16.601913 Event: Make a call to: 07612034661455
+On: 2011-10-14 18:33:16.632653 Event: Number busy or Offline
+On: 2011-10-14 18:33:16.632758 Event: CALL NOT OK
+On: 2011-10-14 18:33:16.632818 Event: Call Disconnected
+On: 2011-10-14 18:33:29.602000 Event: Terminate
+On: 2011-10-14 18:33:29.602059 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-14 18:34:03.643288 ------------------
+On: 2011-10-14 18:34:03.664566 Event: try to Connect to Controller
+On: 2011-10-14 18:34:04.946982 Event: init state
+On: 2011-10-14 18:34:04.947231 Event: Register Account to SIP server
+On: 2011-10-14 18:34:04.948016 Event: 100
+On: 2011-10-14 18:34:04.948102 Event: Caller Handler Ready
+On: 2011-10-14 18:34:11.969795 Event: CALL START
+On: 2011-10-14 18:34:11.969855 Event: Make a call to: 07612034661455
+On: 2011-10-14 18:34:12.012987 Event: Number busy or Offline
+On: 2011-10-14 18:34:12.013093 Event: CALL NOT OK
+On: 2011-10-14 18:34:12.013152 Event: Call Disconnected
+On: 2011-10-14 18:34:24.969934 Event: Terminate
+On: 2011-10-14 18:34:24.969994 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-14 18:36:14.242269 ------------------
+On: 2011-10-14 18:36:14.263091 Event: try to Connect to Controller
+On: 2011-10-14 18:36:15.507092 Event: init state
+On: 2011-10-14 18:36:15.507325 Event: Register Account to SIP server
+On: 2011-10-14 18:36:15.507747 Event: 100
+On: 2011-10-14 18:36:15.507837 Event: Caller Handler Ready
+On: 2011-10-14 18:36:19.515706 Event: Terminate
+On: 2011-10-14 18:36:19.515746 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-14 18:36:59.056259 ------------------
+On: 2011-10-14 18:36:59.076513 Event: try to Connect to Controller
+On: 2011-10-14 18:37:00.326739 Event: init state
+On: 2011-10-14 18:37:00.326982 Event: Register Account to SIP server
+On: 2011-10-14 18:37:00.327784 Event: 100
+On: 2011-10-14 18:37:00.327867 Event: Caller Handler Ready
+On: 2011-10-14 18:37:07.348145 Event: CALL START
+On: 2011-10-14 18:37:07.348206 Event: Make a call to: 07612034661455
+On: 2011-10-14 18:37:07.372104 Event: Number busy or Offline
+On: 2011-10-14 18:37:07.372202 Event: CALL NOT OK
+On: 2011-10-14 18:37:07.372264 Event: Call Disconnected
+On: 2011-10-14 18:37:20.349949 Event: Terminate
+On: 2011-10-14 18:37:20.350007 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-14 18:45:24.035331 ------------------
+On: 2011-10-14 18:45:24.064884 Event: try to Connect to Controller
+On: 2011-10-14 18:45:25.290509 Event: init state
+On: 2011-10-14 18:45:25.290744 Event: Register Account to SIP server
+On: 2011-10-14 18:45:25.291167 Event: 100
+On: 2011-10-14 18:45:25.291255 Event: Caller Handler Ready
+On: 2011-10-14 18:45:32.309393 Event: CALL START
+On: 2011-10-14 18:45:32.309451 Event: Make a call to: 07612034661455
+On: 2011-10-14 18:45:32.361537 Event: Number busy or Offline
+On: 2011-10-14 18:45:32.361641 Event: CALL NOT OK
+On: 2011-10-14 18:45:32.361700 Event: Call Disconnected
+On: 2011-10-14 18:45:45.310428 Event: Terminate
+On: 2011-10-14 18:45:45.310475 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-14 18:46:55.021621 ------------------
+On: 2011-10-14 18:46:55.043937 Event: try to Connect to Controller
+On: 2011-10-14 18:46:56.254510 Event: init state
+On: 2011-10-14 18:46:56.254752 Event: Register Account to SIP server
+On: 2011-10-14 18:46:56.255534 Event: 100
+On: 2011-10-14 18:46:56.255623 Event: Caller Handler Ready
+On: 2011-10-14 18:47:03.277289 Event: CALL START
+On: 2011-10-14 18:47:03.277348 Event: Make a call to: 07612034661455
+On: 2011-10-14 18:47:03.287809 Event: Number busy or Offline
+On: 2011-10-14 18:47:03.287915 Event: CALL NOT OK
+On: 2011-10-14 18:47:03.287976 Event: Call Disconnected
+On: 2011-10-14 18:47:16.275799 Event: Terminate
+On: 2011-10-14 18:47:16.275847 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-14 18:48:33.737226 ------------------
+On: 2011-10-14 18:48:33.757495 Event: try to Connect to Controller
+On: 2011-10-14 18:48:35.006292 Event: init state
+On: 2011-10-14 18:48:35.006536 Event: Register Account to SIP server
+On: 2011-10-14 18:48:35.006943 Event: 100
+On: 2011-10-14 18:48:35.007031 Event: Caller Handler Ready
+On: 2011-10-14 18:48:42.025833 Event: CALL START
+On: 2011-10-14 18:48:42.025895 Event: Make a call to: 07612034661455
+On: 2011-10-14 18:48:42.051201 Event: Number busy or Offline
+On: 2011-10-14 18:48:42.051308 Event: CALL NOT OK
+On: 2011-10-14 18:48:42.051367 Event: Call Disconnected
+On: 2011-10-14 18:48:55.024461 Event: Terminate
+On: 2011-10-14 18:48:55.024510 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-14 18:50:10.440380 ------------------
+On: 2011-10-14 18:50:10.460918 Event: try to Connect to Controller
+On: 2011-10-14 18:50:11.721823 Event: init state
+On: 2011-10-14 18:50:11.722097 Event: Register Account to SIP server
+On: 2011-10-14 18:50:11.722521 Event: 100
+On: 2011-10-14 18:50:11.722607 Event: Caller Handler Ready
+On: 2011-10-14 18:50:15.727408 Event: Terminate
+On: 2011-10-14 18:50:15.727449 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-14 18:50:52.904211 ------------------
+On: 2011-10-14 18:50:52.924517 Event: try to Connect to Controller
+On: 2011-10-14 18:50:54.090434 Event: init state
+On: 2011-10-14 18:50:54.090694 Event: Register Account to SIP server
+On: 2011-10-14 18:50:54.091115 Event: 100
+On: 2011-10-14 18:50:54.091204 Event: Caller Handler Ready
+On: 2011-10-14 18:51:01.108851 Event: CALL START
+On: 2011-10-14 18:51:01.108916 Event: Make a call to: 07612034661447
+On: 2011-10-14 18:51:01.167837 Event: Number busy or Offline
+On: 2011-10-14 18:51:01.167940 Event: CALL NOT OK
+On: 2011-10-14 18:51:01.168001 Event: Call Disconnected
+On: 2011-10-14 18:51:14.110106 Event: Terminate
+On: 2011-10-14 18:51:14.110154 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-14 18:54:58.897235 ------------------
+On: 2011-10-14 18:54:58.918107 Event: try to Connect to Controller
+On: 2011-10-14 18:55:00.173871 Event: init state
+On: 2011-10-14 18:55:00.174121 Event: Register Account to SIP server
+On: 2011-10-14 18:55:00.174896 Event: 100
+On: 2011-10-14 18:55:00.174985 Event: Caller Handler Ready
+On: 2011-10-14 18:55:07.196059 Event: CALL START
+On: 2011-10-14 18:55:07.196124 Event: Make a call to: 07612034661447
+On: 2011-10-14 18:55:07.211779 Event: Number busy or Offline
+On: 2011-10-14 18:55:07.211883 Event: CALL NOT OK
+On: 2011-10-14 18:55:07.211942 Event: Call Disconnected
+On: 2011-10-14 18:55:20.194754 Event: Terminate
+On: 2011-10-14 18:55:20.194802 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-14 18:55:45.758820 ------------------
+On: 2011-10-14 18:55:45.806079 Event: try to Connect to Controller
+On: 2011-10-14 18:55:46.741687 Event: init state
+On: 2011-10-14 18:55:46.742168 Event: Register Account to SIP server
+On: 2011-10-14 18:55:46.742593 Event: 100
+On: 2011-10-14 18:55:46.742680 Event: Caller Handler Ready
+On: 2011-10-14 18:55:53.762078 Event: CALL START
+On: 2011-10-14 18:55:53.762143 Event: Make a call to: 07612034661447
+On: 2011-10-14 18:55:53.794531 Event: Number busy or Offline
+On: 2011-10-14 18:55:53.794638 Event: CALL NOT OK
+On: 2011-10-14 18:55:53.794699 Event: Call Disconnected
+On: 2011-10-14 18:56:06.759921 Event: Terminate
+On: 2011-10-14 18:56:06.759969 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-14 19:14:07.350174 ------------------
+On: 2011-10-14 19:14:07.370577 Event: try to Connect to Controller
+On: 2011-10-14 19:14:08.711183 Event: init state
+On: 2011-10-14 19:14:08.711421 Event: Register Account to SIP server
+On: 2011-10-14 19:14:08.711841 Event: 100
+On: 2011-10-14 19:14:08.711927 Event: Caller Handler Ready
+On: 2011-10-14 19:14:13.724586 Event: CALL START
+On: 2011-10-14 19:14:13.724648 Event: Make a call to: 017678038038
+On: 2011-10-14 19:14:16.289136 Event: Call Connecting
+On: 2011-10-14 19:14:16.289186 Event: 200
+On: 2011-10-14 19:14:26.719620 Event: Terminate
+On: 2011-10-14 19:14:26.719661 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-14 19:14:31.446526 ------------------
+On: 2011-10-14 19:14:31.466978 Event: try to Connect to Controller
+On: 2011-10-14 19:14:32.795097 Event: init state
+On: 2011-10-14 19:14:32.795343 Event: Register Account to SIP server
+On: 2011-10-14 19:14:32.795763 Event: 100
+On: 2011-10-14 19:14:32.795848 Event: Caller Handler Ready
+On: 2011-10-14 19:14:37.805378 Event: CALL START
+On: 2011-10-14 19:14:37.805439 Event: Make a call to: 015128040906
+On: 2011-10-14 19:14:54.552656 Event: Call Connecting
+On: 2011-10-14 19:14:54.552705 Event: 200
+On: 2011-10-14 19:14:54.557213 Event: Terminate
+On: 2011-10-14 19:14:54.557273 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-14 19:14:59.240302 ------------------
+On: 2011-10-14 19:14:59.260827 Event: try to Connect to Controller
+On: 2011-10-14 19:15:00.601124 Event: init state
+On: 2011-10-14 19:15:00.601378 Event: Register Account to SIP server
+On: 2011-10-14 19:15:00.601867 Event: 100
+On: 2011-10-14 19:15:00.601957 Event: Caller Handler Ready
+On: 2011-10-14 19:15:05.611735 Event: CALL START
+On: 2011-10-14 19:15:05.611796 Event: Make a call to: 015252423662
+On: 2011-10-14 19:15:14.672702 Event: Call Connecting
+On: 2011-10-14 19:15:14.672751 Event: 200
+On: 2011-10-14 19:15:14.677246 Event: Terminate
+On: 2011-10-14 19:15:14.677307 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-14 19:15:19.358484 ------------------
+On: 2011-10-14 19:15:19.378781 Event: try to Connect to Controller
+On: 2011-10-14 19:15:20.719382 Event: init state
+On: 2011-10-14 19:15:20.719618 Event: Register Account to SIP server
+On: 2011-10-14 19:15:20.720042 Event: 100
+On: 2011-10-14 19:15:20.720128 Event: Caller Handler Ready
+On: 2011-10-14 19:15:22.730021 Event: Terminate
+On: 2011-10-14 19:15:22.730062 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-14 19:17:04.491562 ------------------
+On: 2011-10-14 19:17:04.511766 Event: try to Connect to Controller
+On: 2011-10-14 19:17:05.849578 Event: init state
+On: 2011-10-14 19:17:05.849876 Event: Register Account to SIP server
+On: 2011-10-14 19:17:05.850302 Event: 100
+On: 2011-10-14 19:17:05.850392 Event: Caller Handler Ready
+On: 2011-10-14 19:17:10.859047 Event: CALL START
+On: 2011-10-14 19:17:10.859105 Event: Make a call to: 015782677224
+On: 2011-10-14 19:17:21.967085 Event: Call Connecting
+On: 2011-10-14 19:17:21.967136 Event: 200
+On: 2011-10-14 19:17:21.969643 Event: Terminate
+On: 2011-10-14 19:17:21.969702 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-14 19:17:26.656367 ------------------
+On: 2011-10-14 19:17:26.676933 Event: try to Connect to Controller
+On: 2011-10-14 19:17:28.014343 Event: init state
+On: 2011-10-14 19:17:28.014596 Event: Register Account to SIP server
+On: 2011-10-14 19:17:28.015375 Event: 100
+On: 2011-10-14 19:17:28.017672 Event: Caller Handler Ready
+On: 2011-10-14 19:17:33.026159 Event: CALL START
+On: 2011-10-14 19:17:33.026215 Event: Make a call to: 017678038038
+On: 2011-10-14 19:17:35.533869 Event: Call Connecting
+On: 2011-10-14 19:17:35.533915 Event: 200
+On: 2011-10-14 19:17:46.023446 Event: Terminate
+On: 2011-10-14 19:17:46.023489 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-14 19:17:50.741071 ------------------
+On: 2011-10-14 19:17:50.761877 Event: try to Connect to Controller
+On: 2011-10-14 19:17:52.098505 Event: init state
+On: 2011-10-14 19:17:52.098761 Event: Register Account to SIP server
+On: 2011-10-14 19:17:52.099177 Event: 100
+On: 2011-10-14 19:17:52.101673 Event: Caller Handler Ready
+On: 2011-10-14 19:17:57.112573 Event: CALL START
+On: 2011-10-14 19:17:57.112632 Event: Make a call to: 015128040906
+On: 2011-10-14 19:18:06.328702 Event: Call Connecting
+On: 2011-10-14 19:18:06.328751 Event: 200
+On: 2011-10-14 19:18:06.333267 Event: Terminate
+On: 2011-10-14 19:18:06.333325 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-14 19:18:11.010539 ------------------
+On: 2011-10-14 19:18:11.030914 Event: try to Connect to Controller
+On: 2011-10-14 19:18:12.371570 Event: init state
+On: 2011-10-14 19:18:12.371803 Event: Register Account to SIP server
+On: 2011-10-14 19:18:12.372577 Event: 100
+On: 2011-10-14 19:18:12.372663 Event: Caller Handler Ready
+On: 2011-10-14 19:18:16.380670 Event: Terminate
+On: 2011-10-14 19:18:16.380708 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-17 16:52:09.398948 ------------------
+On: 2011-10-17 16:52:09.419834 Event: try to Connect to Controller
+On: 2011-10-17 16:52:10.659656 Event: init state
+On: 2011-10-17 16:52:10.659914 Event: Register Account to SIP server
+On: 2011-10-17 16:52:10.660700 Event: 100
+On: 2011-10-17 16:52:10.660790 Event: Caller Handler Ready
+On: 2011-10-17 16:52:15.668589 Event: CALL START
+On: 2011-10-17 16:52:15.668649 Event: Make a call to: 076120397898
+On: 2011-10-17 16:52:15.770875 Event: Call Connecting
+On: 2011-10-17 16:52:15.770926 Event: 200
+On: 2011-10-17 16:52:15.822232 Event: Call Disconnected
+On: 2011-10-17 16:52:16.722212 Event: Terminate
+On: 2011-10-17 16:52:16.722257 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-17 17:16:08.516493 ------------------
+On: 2011-10-17 17:16:08.536775 Event: try to Connect to Controller
+On: 2011-10-17 17:16:09.834471 Event: init state
+On: 2011-10-17 17:16:09.834722 Event: Register Account to SIP server
+On: 2011-10-17 17:16:09.835136 Event: 100
+On: 2011-10-17 17:16:09.835220 Event: Caller Handler Ready
+On: 2011-10-17 17:16:14.848659 Event: CALL START
+On: 2011-10-17 17:16:14.848713 Event: Make a call to: 015782677224
+On: 2011-10-17 17:16:42.842990 Event: Terminate
+On: 2011-10-17 17:16:42.843032 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-17 17:16:47.641772 ------------------
+On: 2011-10-17 17:16:47.662399 Event: try to Connect to Controller
+On: 2011-10-17 17:16:48.926433 Event: init state
+On: 2011-10-17 17:16:48.926977 Event: Register Account to SIP server
+On: 2011-10-17 17:16:48.927418 Event: 100
+On: 2011-10-17 17:16:48.927505 Event: Caller Handler Ready
+On: 2011-10-17 17:16:53.940643 Event: CALL START
+On: 2011-10-17 17:16:53.940703 Event: Make a call to: 017678038038
+On: 2011-10-17 17:17:21.935382 Event: Terminate
+On: 2011-10-17 17:17:21.935425 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-17 17:17:26.730885 ------------------
+On: 2011-10-17 17:17:26.751230 Event: try to Connect to Controller
+On: 2011-10-17 17:17:28.024673 Event: init state
+On: 2011-10-17 17:17:28.024922 Event: Register Account to SIP server
+On: 2011-10-17 17:17:28.025347 Event: 100
+On: 2011-10-17 17:17:28.025426 Event: Caller Handler Ready
+On: 2011-10-17 17:17:33.036705 Event: CALL START
+On: 2011-10-17 17:17:33.036762 Event: Make a call to: 015128040906
+On: 2011-10-17 17:18:01.031833 Event: Terminate
+On: 2011-10-17 17:18:01.031876 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-17 17:18:05.832203 ------------------
+On: 2011-10-17 17:18:05.852589 Event: try to Connect to Controller
+On: 2011-10-17 17:18:07.121894 Event: init state
+On: 2011-10-17 17:18:07.122168 Event: Register Account to SIP server
+On: 2011-10-17 17:18:07.122593 Event: 100
+On: 2011-10-17 17:18:07.122680 Event: Caller Handler Ready
+On: 2011-10-17 17:18:12.129481 Event: CALL START
+On: 2011-10-17 17:18:12.129536 Event: Make a call to: 07612034661449
+On: 2011-10-17 17:18:12.154424 Event: Number busy or Offline
+On: 2011-10-17 17:18:12.154528 Event: CALL NOT OK
+On: 2011-10-17 17:18:12.154589 Event: Call Disconnected
+On: 2011-10-17 17:18:25.128434 Event: Terminate
+On: 2011-10-17 17:18:25.128474 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-17 17:18:29.931905 ------------------
+On: 2011-10-17 17:18:29.952376 Event: try to Connect to Controller
+On: 2011-10-17 17:18:31.216570 Event: init state
+On: 2011-10-17 17:18:31.216812 Event: Register Account to SIP server
+On: 2011-10-17 17:18:31.217232 Event: 100
+On: 2011-10-17 17:18:31.217317 Event: Caller Handler Ready
+On: 2011-10-17 17:18:36.228682 Event: CALL START
+On: 2011-10-17 17:18:36.228737 Event: Make a call to: 015782677224
+On: 2011-10-17 17:19:04.224486 Event: Terminate
+On: 2011-10-17 17:19:04.224527 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-17 17:19:09.023560 ------------------
+On: 2011-10-17 17:19:09.043877 Event: try to Connect to Controller
+On: 2011-10-17 17:19:10.313082 Event: init state
+On: 2011-10-17 17:19:10.313333 Event: Register Account to SIP server
+On: 2011-10-17 17:19:10.313981 Event: 100
+On: 2011-10-17 17:19:10.314081 Event: Caller Handler Ready
+On: 2011-10-17 17:19:15.324010 Event: CALL START
+On: 2011-10-17 17:19:15.324066 Event: Make a call to: 017678038038
+On: 2011-10-17 17:19:43.320571 Event: Terminate
+On: 2011-10-17 17:19:43.320615 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-17 17:19:48.116493 ------------------
+On: 2011-10-17 17:19:48.137012 Event: try to Connect to Controller
+On: 2011-10-17 17:19:49.403338 Event: init state
+On: 2011-10-17 17:19:49.403584 Event: Register Account to SIP server
+On: 2011-10-17 17:19:49.403998 Event: 100
+On: 2011-10-17 17:19:49.404084 Event: Caller Handler Ready
+On: 2011-10-17 17:19:54.416668 Event: CALL START
+On: 2011-10-17 17:19:54.416723 Event: Make a call to: 015128040906
+On: 2011-10-17 17:20:22.411757 Event: Terminate
+On: 2011-10-17 17:20:22.411799 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-17 17:20:27.219150 ------------------
+On: 2011-10-17 17:20:27.239676 Event: try to Connect to Controller
+On: 2011-10-17 17:20:28.515728 Event: init state
+On: 2011-10-17 17:20:28.516013 Event: Register Account to SIP server
+On: 2011-10-17 17:20:28.516432 Event: 100
+On: 2011-10-17 17:20:28.516519 Event: Caller Handler Ready
+On: 2011-10-17 17:20:33.528717 Event: CALL START
+On: 2011-10-17 17:20:33.528775 Event: Make a call to: 07612034661449
+On: 2011-10-17 17:20:33.545074 Event: Number busy or Offline
+On: 2011-10-17 17:20:33.545178 Event: CALL NOT OK
+On: 2011-10-17 17:20:33.545238 Event: Call Disconnected
+On: 2011-10-17 17:20:46.523910 Event: Terminate
+On: 2011-10-17 17:20:46.523951 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-17 17:20:51.295544 ------------------
+On: 2011-10-17 17:20:51.315650 Event: try to Connect to Controller
+On: 2011-10-17 17:20:52.620903 Event: init state
+On: 2011-10-17 17:20:52.621157 Event: Register Account to SIP server
+On: 2011-10-17 17:20:52.621808 Event: 100
+On: 2011-10-17 17:20:52.621910 Event: Caller Handler Ready
+On: 2011-10-17 17:20:57.632683 Event: CALL START
+On: 2011-10-17 17:20:57.632736 Event: Make a call to: 015782677224
+On: 2011-10-17 17:21:04.734133 Event: Call Connecting
+On: 2011-10-17 17:21:04.734182 Event: 200
+On: 2011-10-17 17:21:10.628429 Event: Terminate
+On: 2011-10-17 17:21:10.628470 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-17 17:21:15.472583 ------------------
+On: 2011-10-17 17:21:15.492823 Event: try to Connect to Controller
+On: 2011-10-17 17:21:16.709851 Event: init state
+On: 2011-10-17 17:21:16.710089 Event: Register Account to SIP server
+On: 2011-10-17 17:21:16.710513 Event: 100
+On: 2011-10-17 17:21:16.710600 Event: Caller Handler Ready
+On: 2011-10-17 17:21:21.720679 Event: CALL START
+On: 2011-10-17 17:21:21.720733 Event: Make a call to: 017678038038
+On: 2011-10-17 17:21:39.761557 Event: Call Connecting
+On: 2011-10-17 17:21:39.761605 Event: 200
+On: 2011-10-17 17:21:39.762687 Event: Terminate
+On: 2011-10-17 17:21:39.762727 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-17 17:21:44.559568 ------------------
+On: 2011-10-17 17:21:44.579574 Event: try to Connect to Controller
+On: 2011-10-17 17:21:45.846188 Event: init state
+On: 2011-10-17 17:21:45.846426 Event: Register Account to SIP server
+On: 2011-10-17 17:21:45.846842 Event: 100
+On: 2011-10-17 17:21:45.846929 Event: Caller Handler Ready
+On: 2011-10-17 17:21:50.856573 Event: CALL START
+On: 2011-10-17 17:21:50.856627 Event: Make a call to: 015128040906
+On: 2011-10-17 17:22:13.398998 Event: Call Connecting
+On: 2011-10-17 17:22:13.399045 Event: 200
+On: 2011-10-17 17:22:13.400156 Event: Terminate
+On: 2011-10-17 17:22:13.400196 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-17 17:22:18.187987 ------------------
+On: 2011-10-17 17:22:18.208179 Event: try to Connect to Controller
+On: 2011-10-17 17:22:19.489625 Event: init state
+On: 2011-10-17 17:22:19.490089 Event: Register Account to SIP server
+On: 2011-10-17 17:22:19.490514 Event: 100
+On: 2011-10-17 17:22:19.490600 Event: Caller Handler Ready
+On: 2011-10-17 17:22:24.500680 Event: CALL START
+On: 2011-10-17 17:22:24.500734 Event: Make a call to: 07612034661449
+On: 2011-10-17 17:22:24.510512 Event: Number busy or Offline
+On: 2011-10-17 17:22:24.510614 Event: CALL NOT OK
+On: 2011-10-17 17:22:24.510674 Event: Call Disconnected
+On: 2011-10-17 17:22:37.496437 Event: Terminate
+On: 2011-10-17 17:22:37.496476 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-17 17:22:42.283517 ------------------
+On: 2011-10-17 17:22:42.303509 Event: try to Connect to Controller
+On: 2011-10-17 17:22:43.584657 Event: init state
+On: 2011-10-17 17:22:43.584905 Event: Register Account to SIP server
+On: 2011-10-17 17:22:43.585321 Event: 100
+On: 2011-10-17 17:22:43.585405 Event: Caller Handler Ready
+On: 2011-10-17 17:22:48.596679 Event: CALL START
+On: 2011-10-17 17:22:48.596732 Event: Make a call to: 07612034661449
+On: 2011-10-17 17:22:48.653078 Event: Number busy or Offline
+On: 2011-10-17 17:22:48.653181 Event: CALL NOT OK
+On: 2011-10-17 17:22:48.653240 Event: Call Disconnected
+On: 2011-10-17 17:23:01.593305 Event: Terminate
+On: 2011-10-17 17:23:01.593346 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-17 17:23:06.677219 ------------------
+On: 2011-10-17 17:23:06.739270 Event: try to Connect to Controller
+On: 2011-10-17 17:23:07.690573 Event: init state
+On: 2011-10-17 17:23:07.690816 Event: Register Account to SIP server
+On: 2011-10-17 17:23:07.691240 Event: 100
+On: 2011-10-17 17:23:07.691323 Event: Caller Handler Ready
+On: 2011-10-17 17:23:12.704982 Event: CALL START
+On: 2011-10-17 17:23:12.705038 Event: Make a call to: 07612034661449
+On: 2011-10-17 17:23:12.748059 Event: Number busy or Offline
+On: 2011-10-17 17:23:12.748159 Event: CALL NOT OK
+On: 2011-10-17 17:23:12.748219 Event: Call Disconnected
+On: 2011-10-17 17:23:25.707069 Event: Terminate
+On: 2011-10-17 17:23:25.707111 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-17 17:23:30.503217 ------------------
+On: 2011-10-17 17:23:30.523673 Event: try to Connect to Controller
+On: 2011-10-17 17:23:31.801190 Event: init state
+On: 2011-10-17 17:23:31.801498 Event: Register Account to SIP server
+On: 2011-10-17 17:23:31.801924 Event: 100
+On: 2011-10-17 17:23:31.802007 Event: Caller Handler Ready
+On: 2011-10-17 17:23:36.812663 Event: CALL START
+On: 2011-10-17 17:23:36.812718 Event: Make a call to: 07612034661449
+On: 2011-10-17 17:23:36.870493 Event: Number busy or Offline
+On: 2011-10-17 17:23:36.870594 Event: CALL NOT OK
+On: 2011-10-17 17:23:36.870652 Event: Call Disconnected
+On: 2011-10-17 17:23:49.808469 Event: Terminate
+On: 2011-10-17 17:23:49.808511 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-17 17:23:54.591446 ------------------
+On: 2011-10-17 17:23:54.611481 Event: try to Connect to Controller
+On: 2011-10-17 17:23:55.900432 Event: init state
+On: 2011-10-17 17:23:55.902300 Event: Register Account to SIP server
+On: 2011-10-17 17:23:55.902750 Event: 100
+On: 2011-10-17 17:23:55.902842 Event: Caller Handler Ready
+On: 2011-10-17 17:24:00.920656 Event: CALL START
+On: 2011-10-17 17:24:00.920711 Event: Make a call to: 07612034661449
+On: 2011-10-17 17:24:00.965562 Event: Number busy or Offline
+On: 2011-10-17 17:24:00.965668 Event: CALL NOT OK
+On: 2011-10-17 17:24:00.965728 Event: Call Disconnected
+
+
+------------------STARTED THE LOGGING 2011-10-17 17:31:00.091233 ------------------
+On: 2011-10-17 17:31:00.111552 Event: try to Connect to Controller
+On: 2011-10-17 17:31:01.412723 Event: init state
+On: 2011-10-17 17:31:01.412976 Event: Register Account to SIP server
+On: 2011-10-17 17:31:01.413966 Event: 100
+On: 2011-10-17 17:31:01.416308 Event: Caller Handler Ready
+On: 2011-10-17 17:31:06.421465 Event: CALL START
+On: 2011-10-17 17:31:06.421520 Event: Make a call to: 015782677224
+On: 2011-10-17 17:31:12.139177 Event: Call Connecting
+On: 2011-10-17 17:31:12.139226 Event: 200
+On: 2011-10-17 17:31:19.420453 Event: Terminate
+On: 2011-10-17 17:31:19.420495 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-17 17:31:24.197063 ------------------
+On: 2011-10-17 17:31:24.217709 Event: try to Connect to Controller
+On: 2011-10-17 17:31:25.499803 Event: init state
+On: 2011-10-17 17:31:25.500063 Event: Register Account to SIP server
+On: 2011-10-17 17:31:25.500846 Event: 100
+On: 2011-10-17 17:31:25.500929 Event: Caller Handler Ready
+On: 2011-10-17 17:31:30.509053 Event: CALL START
+On: 2011-10-17 17:31:30.509113 Event: Make a call to: 017678038038
+On: 2011-10-17 17:31:36.516289 Event: Call Connecting
+On: 2011-10-17 17:31:36.516337 Event: 200
+On: 2011-10-17 17:31:43.507451 Event: Terminate
+On: 2011-10-17 17:31:43.507492 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-17 17:31:48.310802 ------------------
+On: 2011-10-17 17:31:48.331025 Event: try to Connect to Controller
+On: 2011-10-17 17:31:49.588683 Event: init state
+On: 2011-10-17 17:31:49.588923 Event: Register Account to SIP server
+On: 2011-10-17 17:31:49.589341 Event: 100
+On: 2011-10-17 17:31:49.589426 Event: Caller Handler Ready
+On: 2011-10-17 17:31:54.600557 Event: CALL START
+On: 2011-10-17 17:31:54.600612 Event: Make a call to: 015128040906
+On: 2011-10-17 17:32:00.826171 Event: Call Connecting
+On: 2011-10-17 17:32:00.826221 Event: 200
+On: 2011-10-17 17:32:07.596421 Event: Terminate
+On: 2011-10-17 17:32:07.596462 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-17 17:32:12.439907 ------------------
+On: 2011-10-17 17:32:12.460316 Event: try to Connect to Controller
+On: 2011-10-17 17:32:13.690957 Event: init state
+On: 2011-10-17 17:32:13.691222 Event: Register Account to SIP server
+On: 2011-10-17 17:32:13.692002 Event: 100
+On: 2011-10-17 17:32:13.692088 Event: Caller Handler Ready
+On: 2011-10-17 17:32:18.704572 Event: CALL START
+On: 2011-10-17 17:32:18.704626 Event: Make a call to: 015252423662
+On: 2011-10-17 17:32:24.953325 Event: Call Connecting
+On: 2011-10-17 17:32:24.953374 Event: 200
+On: 2011-10-17 17:32:31.699670 Event: Terminate
+On: 2011-10-17 17:32:31.699712 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-17 17:39:30.367101 ------------------
+On: 2011-10-17 17:39:30.387423 Event: try to Connect to Controller
+On: 2011-10-17 17:39:31.694083 Event: init state
+On: 2011-10-17 17:39:31.694335 Event: Register Account to SIP server
+On: 2011-10-17 17:39:31.694755 Event: 100
+On: 2011-10-17 17:39:31.694841 Event: Caller Handler Ready
+On: 2011-10-17 17:39:36.704675 Event: CALL START
+On: 2011-10-17 17:39:36.704729 Event: Make a call to: 017678038038
+On: 2011-10-17 17:39:38.934298 Event: Call Connecting
+On: 2011-10-17 17:39:38.934347 Event: 200
+On: 2011-10-17 17:39:49.700412 Event: Terminate
+On: 2011-10-17 17:39:49.700453 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-17 17:39:54.506473 ------------------
+On: 2011-10-17 17:39:54.526480 Event: try to Connect to Controller
+On: 2011-10-17 17:39:55.792648 Event: init state
+On: 2011-10-17 17:39:55.792901 Event: Register Account to SIP server
+On: 2011-10-17 17:39:55.793877 Event: 100
+On: 2011-10-17 17:39:55.796138 Event: Caller Handler Ready
+On: 2011-10-17 17:40:00.804685 Event: CALL START
+On: 2011-10-17 17:40:00.804741 Event: Make a call to: 015128040906
+On: 2011-10-17 17:40:03.073285 Event: Call Connecting
+On: 2011-10-17 17:40:03.073333 Event: 200
+On: 2011-10-17 17:40:13.800372 Event: Terminate
+On: 2011-10-17 17:40:13.800412 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-17 17:40:18.591321 ------------------
+On: 2011-10-17 17:40:18.611578 Event: try to Connect to Controller
+On: 2011-10-17 17:40:19.882456 Event: init state
+On: 2011-10-17 17:40:19.882918 Event: Register Account to SIP server
+On: 2011-10-17 17:40:19.883361 Event: 100
+On: 2011-10-17 17:40:19.883449 Event: Caller Handler Ready
+On: 2011-10-17 17:40:24.896684 Event: CALL START
+On: 2011-10-17 17:40:24.896742 Event: Make a call to: 015252423662
+On: 2011-10-17 17:40:27.931247 Event: Call Connecting
+On: 2011-10-17 17:40:27.931297 Event: 200
+On: 2011-10-17 17:40:37.890974 Event: Terminate
+On: 2011-10-17 17:40:37.891015 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-17 17:40:42.678959 ------------------
+On: 2011-10-17 17:40:42.699420 Event: try to Connect to Controller
+On: 2011-10-17 17:40:42.699838 Event: Cant connect to Controller
+
+
+------------------STARTED THE LOGGING 2011-10-17 17:40:52.709828 ------------------
+On: 2011-10-17 17:40:52.730059 Event: try to Connect to Controller
+On: 2011-10-17 17:40:54.026325 Event: init state
+On: 2011-10-17 17:40:54.026570 Event: Register Account to SIP server
+On: 2011-10-17 17:40:54.026990 Event: 100
+On: 2011-10-17 17:40:54.027078 Event: Caller Handler Ready
+On: 2011-10-17 17:41:01.048524 Event: CALL START
+On: 2011-10-17 17:41:01.048579 Event: Make a call to: 07612034661447
+On: 2011-10-17 17:41:01.075405 Event: Number busy or Offline
+On: 2011-10-17 17:41:01.075576 Event: CALL NOT OK
+On: 2011-10-17 17:41:01.075645 Event: Call Disconnected
+On: 2011-10-17 17:41:14.046809 Event: Terminate
+On: 2011-10-17 17:41:14.046869 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-17 17:47:18.191127 ------------------
+On: 2011-10-17 17:47:18.211417 Event: try to Connect to Controller
+On: 2011-10-17 17:47:19.522029 Event: init state
+On: 2011-10-17 17:47:19.522275 Event: Register Account to SIP server
+On: 2011-10-17 17:47:19.522697 Event: 100
+On: 2011-10-17 17:47:19.522781 Event: Caller Handler Ready
+On: 2011-10-17 17:47:24.531108 Event: CALL START
+On: 2011-10-17 17:47:24.531168 Event: Make a call to: 015782677224
+On: 2011-10-17 17:47:26.512733 Event: Call Connecting
+On: 2011-10-17 17:47:26.512783 Event: 200
+On: 2011-10-17 17:47:37.528481 Event: Terminate
+On: 2011-10-17 17:47:37.528524 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-17 17:47:42.426099 ------------------
+On: 2011-10-17 17:47:42.446325 Event: try to Connect to Controller
+On: 2011-10-17 17:47:43.616630 Event: init state
+On: 2011-10-17 17:47:43.616883 Event: Register Account to SIP server
+On: 2011-10-17 17:47:43.617298 Event: 100
+On: 2011-10-17 17:47:43.617381 Event: Caller Handler Ready
+On: 2011-10-17 17:47:48.626705 Event: CALL START
+On: 2011-10-17 17:47:48.626756 Event: Make a call to: 015128040906
+On: 2011-10-17 17:47:51.099342 Event: Call Connecting
+On: 2011-10-17 17:47:51.099392 Event: 200
+On: 2011-10-17 17:48:01.623851 Event: Terminate
+On: 2011-10-17 17:48:01.623895 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-17 17:48:06.458552 ------------------
+On: 2011-10-17 17:48:06.478494 Event: try to Connect to Controller
+On: 2011-10-17 17:48:07.716399 Event: init state
+On: 2011-10-17 17:48:07.716651 Event: Register Account to SIP server
+On: 2011-10-17 17:48:07.717073 Event: 100
+On: 2011-10-17 17:48:07.717161 Event: Caller Handler Ready
+On: 2011-10-17 17:48:12.728542 Event: CALL START
+On: 2011-10-17 17:48:12.728601 Event: Make a call to: 015252423662
+On: 2011-10-17 17:48:15.186422 Event: Call Connecting
+On: 2011-10-17 17:48:15.186471 Event: 200
+On: 2011-10-17 17:48:25.724497 Event: Terminate
+On: 2011-10-17 17:48:25.724538 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-17 18:03:21.399546 ------------------
+On: 2011-10-17 18:03:21.419503 Event: try to Connect to Controller
+On: 2011-10-17 18:03:22.726489 Event: init state
+On: 2011-10-17 18:03:22.726725 Event: Register Account to SIP server
+On: 2011-10-17 18:03:22.727511 Event: 100
+On: 2011-10-17 18:03:22.727595 Event: Caller Handler Ready
+On: 2011-10-17 18:03:27.737490 Event: CALL START
+On: 2011-10-17 18:03:27.737545 Event: Make a call to: 017678038038
+On: 2011-10-17 18:03:30.017149 Event: Call Connecting
+On: 2011-10-17 18:03:30.017197 Event: 200
+On: 2011-10-17 18:03:40.735133 Event: Terminate
+On: 2011-10-17 18:03:40.735175 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-17 18:03:45.525406 ------------------
+On: 2011-10-17 18:03:45.545795 Event: try to Connect to Controller
+On: 2011-10-17 18:03:46.819146 Event: init state
+On: 2011-10-17 18:03:46.819401 Event: Register Account to SIP server
+On: 2011-10-17 18:03:46.819826 Event: 100
+On: 2011-10-17 18:03:46.819909 Event: Caller Handler Ready
+On: 2011-10-17 18:03:51.828750 Event: CALL START
+On: 2011-10-17 18:03:51.828805 Event: Make a call to: 015128040906
+On: 2011-10-17 18:03:54.093963 Event: Call Connecting
+On: 2011-10-17 18:03:54.094013 Event: 200
+On: 2011-10-17 18:04:04.825842 Event: Terminate
+On: 2011-10-17 18:04:04.825885 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-17 18:04:09.606379 ------------------
+On: 2011-10-17 18:04:09.626674 Event: try to Connect to Controller
+On: 2011-10-17 18:04:10.920456 Event: init state
+On: 2011-10-17 18:04:10.920708 Event: Register Account to SIP server
+On: 2011-10-17 18:04:10.921126 Event: 100
+On: 2011-10-17 18:04:10.921213 Event: Caller Handler Ready
+On: 2011-10-17 18:04:15.932702 Event: CALL START
+On: 2011-10-17 18:04:15.932755 Event: Make a call to: 015252423662
+On: 2011-10-17 18:04:18.432183 Event: Call Connecting
+On: 2011-10-17 18:04:18.432233 Event: 200
+On: 2011-10-17 18:04:28.928407 Event: Terminate
+On: 2011-10-17 18:04:28.928447 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-17 18:04:33.829925 ------------------
+On: 2011-10-17 18:04:33.850037 Event: try to Connect to Controller
+On: 2011-10-17 18:04:35.014061 Event: init state
+On: 2011-10-17 18:04:35.014316 Event: Register Account to SIP server
+On: 2011-10-17 18:04:35.015092 Event: 100
+On: 2011-10-17 18:04:35.017294 Event: Caller Handler Ready
+On: 2011-10-17 18:04:40.028673 Event: CALL START
+On: 2011-10-17 18:04:40.028740 Event: Make a call to: 07612034661449
+On: 2011-10-17 18:04:40.047991 Event: Number busy or Offline
+On: 2011-10-17 18:04:40.048098 Event: CALL NOT OK
+On: 2011-10-17 18:04:40.048159 Event: Call Disconnected
+On: 2011-10-17 18:04:53.021848 Event: Terminate
+On: 2011-10-17 18:04:53.021891 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-17 18:10:26.411494 ------------------
+On: 2011-10-17 18:10:26.431993 Event: try to Connect to Controller
+On: 2011-10-17 18:10:27.730429 Event: init state
+On: 2011-10-17 18:10:27.730681 Event: Register Account to SIP server
+On: 2011-10-17 18:10:27.731103 Event: 100
+On: 2011-10-17 18:10:27.731190 Event: Caller Handler Ready
+On: 2011-10-17 18:10:32.744654 Event: CALL START
+On: 2011-10-17 18:10:32.744710 Event: Make a call to: 015782677224
+On: 2011-10-17 18:10:34.978364 Event: Call Connecting
+On: 2011-10-17 18:10:34.978412 Event: 200
+On: 2011-10-17 18:10:45.737832 Event: Terminate
+On: 2011-10-17 18:10:45.737874 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-17 18:10:50.526383 ------------------
+On: 2011-10-17 18:10:50.546550 Event: try to Connect to Controller
+On: 2011-10-17 18:10:51.826373 Event: init state
+On: 2011-10-17 18:10:51.826641 Event: Register Account to SIP server
+On: 2011-10-17 18:10:51.827078 Event: 100
+On: 2011-10-17 18:10:51.827167 Event: Caller Handler Ready
+On: 2011-10-17 18:10:56.840650 Event: CALL START
+On: 2011-10-17 18:10:56.840702 Event: Make a call to: 017678038038
+On: 2011-10-17 18:10:59.097393 Event: Call Connecting
+On: 2011-10-17 18:10:59.097470 Event: 200
+On: 2011-10-17 18:11:09.835346 Event: Terminate
+On: 2011-10-17 18:11:09.835387 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-17 18:11:14.625251 ------------------
+On: 2011-10-17 18:11:14.645799 Event: try to Connect to Controller
+On: 2011-10-17 18:11:15.926933 Event: init state
+On: 2011-10-17 18:11:15.927183 Event: Register Account to SIP server
+On: 2011-10-17 18:11:15.927605 Event: 100
+On: 2011-10-17 18:11:15.927692 Event: Caller Handler Ready
+On: 2011-10-17 18:11:20.940769 Event: CALL START
+On: 2011-10-17 18:11:20.940824 Event: Make a call to: 015252423662
+On: 2011-10-17 18:11:22.432173 Event: Call Connecting
+On: 2011-10-17 18:11:22.432223 Event: 200
+On: 2011-10-17 18:11:33.935838 Event: Terminate
+On: 2011-10-17 18:11:33.935881 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 12:31:37.645224 ------------------
+On: 2011-10-20 12:31:37.665103 Event: try to Connect to Controller
+On: 2011-10-20 12:31:38.989989 Event: init state
+On: 2011-10-20 12:31:38.990241 Event: Register Account to SIP server
+On: 2011-10-20 12:31:38.990660 Event: 100
+On: 2011-10-20 12:31:38.990746 Event: Caller Handler Ready
+On: 2011-10-20 12:31:44.004806 Event: CALL START
+On: 2011-10-20 12:31:44.004859 Event: Make a call to: 017678038038
+On: 2011-10-20 12:31:46.270969 Event: Call Connecting
+On: 2011-10-20 12:31:46.271017 Event: 200
+On: 2011-10-20 12:31:55.996303 Event: Terminate
+On: 2011-10-20 12:31:55.996346 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 12:32:00.780216 ------------------
+On: 2011-10-20 12:32:00.800471 Event: try to Connect to Controller
+On: 2011-10-20 12:32:02.081959 Event: init state
+On: 2011-10-20 12:32:02.082218 Event: Register Account to SIP server
+On: 2011-10-20 12:32:02.082638 Event: 100
+On: 2011-10-20 12:32:02.082724 Event: Caller Handler Ready
+On: 2011-10-20 12:32:07.092825 Event: CALL START
+On: 2011-10-20 12:32:07.092884 Event: Make a call to: 015128040906
+On: 2011-10-20 12:32:09.606491 Event: Call Connecting
+On: 2011-10-20 12:32:09.606538 Event: 200
+On: 2011-10-20 12:32:19.087643 Event: Terminate
+On: 2011-10-20 12:32:19.087685 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 12:32:23.845144 ------------------
+On: 2011-10-20 12:32:23.865256 Event: try to Connect to Controller
+On: 2011-10-20 12:32:25.171609 Event: init state
+On: 2011-10-20 12:32:25.172055 Event: Register Account to SIP server
+On: 2011-10-20 12:32:25.172495 Event: 100
+On: 2011-10-20 12:32:25.172579 Event: Caller Handler Ready
+On: 2011-10-20 12:32:30.184819 Event: CALL START
+On: 2011-10-20 12:32:30.184873 Event: Make a call to: 015252423662
+On: 2011-10-20 12:32:32.718896 Event: Call Connecting
+On: 2011-10-20 12:32:32.718943 Event: 200
+On: 2011-10-20 12:32:42.179176 Event: Terminate
+On: 2011-10-20 12:32:42.179218 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 12:32:46.943032 ------------------
+On: 2011-10-20 12:32:46.963427 Event: try to Connect to Controller
+On: 2011-10-20 12:32:48.241836 Event: init state
+On: 2011-10-20 12:32:48.242095 Event: Register Account to SIP server
+On: 2011-10-20 12:32:48.242514 Event: 100
+On: 2011-10-20 12:32:48.242599 Event: Caller Handler Ready
+On: 2011-10-20 12:32:58.262860 Event: CALL START
+On: 2011-10-20 12:32:58.262916 Event: Make a call to: 07612034661447
+On: 2011-10-20 12:32:58.323988 Event: Number busy or Offline
+On: 2011-10-20 12:32:58.324093 Event: CALL NOT OK
+On: 2011-10-20 12:32:58.324154 Event: Call Disconnected
+On: 2011-10-20 12:33:10.262346 Event: Terminate
+On: 2011-10-20 12:33:10.262392 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 12:33:14.971024 ------------------
+On: 2011-10-20 12:33:14.991748 Event: try to Connect to Controller
+On: 2011-10-20 12:33:16.303674 Event: init state
+On: 2011-10-20 12:33:16.303919 Event: Register Account to SIP server
+On: 2011-10-20 12:33:16.304346 Event: 100
+On: 2011-10-20 12:33:16.304434 Event: Caller Handler Ready
+On: 2011-10-20 12:33:26.325804 Event: CALL START
+On: 2011-10-20 12:33:26.325874 Event: Make a call to: 07612034661455
+On: 2011-10-20 12:33:26.360797 Event: Number busy or Offline
+On: 2011-10-20 12:33:26.360903 Event: CALL NOT OK
+On: 2011-10-20 12:33:26.360965 Event: Call Disconnected
+On: 2011-10-20 12:33:38.325394 Event: Terminate
+On: 2011-10-20 12:33:38.325450 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 12:42:46.934458 ------------------
+On: 2011-10-20 12:42:46.954899 Event: try to Connect to Controller
+On: 2011-10-20 12:42:48.185769 Event: init state
+On: 2011-10-20 12:42:48.186201 Event: Register Account to SIP server
+On: 2011-10-20 12:42:48.186626 Event: 100
+On: 2011-10-20 12:42:48.186712 Event: Receiver Handler Ready
+On: 2011-10-20 12:42:48.187130 Event: RECEIVE START
+On: 2011-10-20 12:42:50.232558 Event: {Call "447" <sip:447@132.230.4.8>}
+On: 2011-10-20 12:42:50.233063 Event: Call Connecting
+On: 2011-10-20 12:42:50.233104 Event: 200
+On: 2011-10-20 12:42:50.233359 Event: Answer call
+On: 2011-10-20 12:42:50.233414 Event: Hangup call
+On: 2011-10-20 12:42:50.233589 Event: CALL OK
+On: 2011-10-20 12:42:50.284273 Event: Call Disconnected
+On: 2011-10-20 12:42:51.732958 Event: Terminate
+On: 2011-10-20 12:42:51.733014 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 12:42:56.496696 ------------------
+On: 2011-10-20 12:42:56.517360 Event: try to Connect to Controller
+On: 2011-10-20 12:42:57.778492 Event: init state
+On: 2011-10-20 12:42:57.778731 Event: Register Account to SIP server
+On: 2011-10-20 12:42:57.779510 Event: 100
+On: 2011-10-20 12:42:57.781938 Event: Caller Handler Ready
+On: 2011-10-20 12:43:02.788826 Event: CALL START
+On: 2011-10-20 12:43:02.788882 Event: Make a call to: 015782677224
+On: 2011-10-20 12:43:05.070307 Event: Call Connecting
+On: 2011-10-20 12:43:05.070354 Event: 200
+On: 2011-10-20 12:43:14.786147 Event: Terminate
+On: 2011-10-20 12:43:14.786186 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 12:43:19.625539 ------------------
+On: 2011-10-20 12:43:19.645960 Event: try to Connect to Controller
+On: 2011-10-20 12:43:20.873875 Event: init state
+On: 2011-10-20 12:43:20.874410 Event: Register Account to SIP server
+On: 2011-10-20 12:43:20.874880 Event: 100
+On: 2011-10-20 12:43:20.874963 Event: Caller Handler Ready
+On: 2011-10-20 12:43:25.884936 Event: CALL START
+On: 2011-10-20 12:43:25.884995 Event: Make a call to: 017678038038
+On: 2011-10-20 12:43:27.844770 Event: Call Connecting
+On: 2011-10-20 12:43:27.844815 Event: 200
+On: 2011-10-20 12:43:37.879614 Event: Terminate
+On: 2011-10-20 12:43:37.879654 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 12:43:42.695466 ------------------
+On: 2011-10-20 12:43:42.716079 Event: try to Connect to Controller
+On: 2011-10-20 12:43:43.962693 Event: init state
+On: 2011-10-20 12:43:43.962940 Event: Register Account to SIP server
+On: 2011-10-20 12:43:43.963354 Event: 100
+On: 2011-10-20 12:43:43.963441 Event: Caller Handler Ready
+On: 2011-10-20 12:43:48.969733 Event: CALL START
+On: 2011-10-20 12:43:48.969789 Event: Make a call to: 015128040906
+On: 2011-10-20 12:43:50.699760 Event: Call Connecting
+On: 2011-10-20 12:43:50.699806 Event: 200
+On: 2011-10-20 12:44:00.969884 Event: Terminate
+On: 2011-10-20 12:44:00.969927 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 12:44:05.783661 ------------------
+On: 2011-10-20 12:44:05.804031 Event: try to Connect to Controller
+On: 2011-10-20 12:44:07.055399 Event: init state
+On: 2011-10-20 12:44:07.055648 Event: Register Account to SIP server
+On: 2011-10-20 12:44:07.056074 Event: 100
+On: 2011-10-20 12:44:07.056158 Event: Caller Handler Ready
+On: 2011-10-20 12:44:12.063697 Event: CALL START
+On: 2011-10-20 12:44:12.063754 Event: Make a call to: 015252423662
+On: 2011-10-20 12:44:13.839020 Event: Call Connecting
+On: 2011-10-20 12:44:13.839067 Event: 200
+On: 2011-10-20 12:44:24.062701 Event: Terminate
+On: 2011-10-20 12:44:24.062743 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 12:50:32.154686 ------------------
+On: 2011-10-20 12:50:32.175190 Event: try to Connect to Controller
+On: 2011-10-20 12:50:33.108947 Event: init state
+On: 2011-10-20 12:50:33.109187 Event: Register Account to SIP server
+On: 2011-10-20 12:50:33.109612 Event: 100
+On: 2011-10-20 12:50:33.109700 Event: Receiver Handler Ready
+On: 2011-10-20 12:50:33.110029 Event: RECEIVE START
+On: 2011-10-20 12:50:35.148315 Event: {Call "447" <sip:447@132.230.4.8>}
+On: 2011-10-20 12:50:35.148812 Event: Call Connecting
+On: 2011-10-20 12:50:35.148853 Event: 200
+On: 2011-10-20 12:50:35.149108 Event: Answer call
+On: 2011-10-20 12:50:35.149160 Event: Hangup call
+On: 2011-10-20 12:50:35.149334 Event: CALL OK
+On: 2011-10-20 12:50:35.200021 Event: Call Disconnected
+On: 2011-10-20 12:50:36.541576 Event: Terminate
+On: 2011-10-20 12:50:36.541621 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 12:50:41.263047 ------------------
+On: 2011-10-20 12:50:41.283622 Event: try to Connect to Controller
+On: 2011-10-20 12:50:42.589123 Event: init state
+On: 2011-10-20 12:50:42.589367 Event: Register Account to SIP server
+On: 2011-10-20 12:50:42.589977 Event: 100
+On: 2011-10-20 12:50:42.590077 Event: Caller Handler Ready
+On: 2011-10-20 12:50:47.597788 Event: CALL START
+On: 2011-10-20 12:50:47.597863 Event: Make a call to: 017678038038
+On: 2011-10-20 12:50:49.371339 Event: Call Connecting
+On: 2011-10-20 12:50:49.371387 Event: 200
+On: 2011-10-20 12:50:59.595783 Event: Terminate
+On: 2011-10-20 12:50:59.595822 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 12:51:04.391124 ------------------
+On: 2011-10-20 12:51:04.411647 Event: try to Connect to Controller
+On: 2011-10-20 12:51:05.678645 Event: init state
+On: 2011-10-20 12:51:05.678988 Event: Register Account to SIP server
+On: 2011-10-20 12:51:05.679415 Event: 100
+On: 2011-10-20 12:51:05.679501 Event: Caller Handler Ready
+On: 2011-10-20 12:51:10.691644 Event: CALL START
+On: 2011-10-20 12:51:10.691698 Event: Make a call to: 015128040906
+On: 2011-10-20 12:51:13.164664 Event: Call Connecting
+On: 2011-10-20 12:51:13.164711 Event: 200
+On: 2011-10-20 12:51:22.685938 Event: Terminate
+On: 2011-10-20 12:51:22.685981 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 12:51:27.482203 ------------------
+On: 2011-10-20 12:51:27.502625 Event: try to Connect to Controller
+On: 2011-10-20 12:51:28.771463 Event: init state
+On: 2011-10-20 12:51:28.771711 Event: Register Account to SIP server
+On: 2011-10-20 12:51:28.772132 Event: 100
+On: 2011-10-20 12:51:28.772220 Event: Caller Handler Ready
+On: 2011-10-20 12:51:33.782400 Event: CALL START
+On: 2011-10-20 12:51:33.782459 Event: Make a call to: 015252423662
+On: 2011-10-20 12:51:36.308306 Event: Call Connecting
+On: 2011-10-20 12:51:36.308353 Event: 200
+On: 2011-10-20 12:51:45.778735 Event: Terminate
+On: 2011-10-20 12:51:45.778777 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 12:57:13.265235 ------------------
+On: 2011-10-20 12:57:13.290966 Event: try to Connect to Controller
+On: 2011-10-20 12:57:14.441943 Event: init state
+On: 2011-10-20 12:57:14.442180 Event: Register Account to SIP server
+On: 2011-10-20 12:57:14.442602 Event: 100
+On: 2011-10-20 12:57:14.442687 Event: Receiver Handler Ready
+On: 2011-10-20 12:57:14.442953 Event: RECEIVE START
+On: 2011-10-20 12:57:16.470094 Event: {Call "455" <sip:455@132.230.4.8>}
+On: 2011-10-20 12:57:16.470594 Event: Call Connecting
+On: 2011-10-20 12:57:16.470634 Event: 200
+On: 2011-10-20 12:57:16.470891 Event: Answer call
+On: 2011-10-20 12:57:16.470943 Event: Hangup call
+On: 2011-10-20 12:57:16.471120 Event: CALL OK
+On: 2011-10-20 12:57:16.521851 Event: Call Disconnected
+On: 2011-10-20 12:57:17.898634 Event: Terminate
+On: 2011-10-20 12:57:17.898689 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 12:57:22.641066 ------------------
+On: 2011-10-20 12:57:22.661379 Event: try to Connect to Controller
+On: 2011-10-20 12:57:23.943842 Event: init state
+On: 2011-10-20 12:57:23.944108 Event: Register Account to SIP server
+On: 2011-10-20 12:57:23.944525 Event: 100
+On: 2011-10-20 12:57:23.945808 Event: Caller Handler Ready
+On: 2011-10-20 12:57:28.956823 Event: CALL START
+On: 2011-10-20 12:57:28.956879 Event: Make a call to: 015782677224
+On: 2011-10-20 12:57:30.700147 Event: Call Connecting
+On: 2011-10-20 12:57:30.700194 Event: 200
+On: 2011-10-20 12:57:40.951291 Event: Terminate
+On: 2011-10-20 12:57:40.951333 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 12:57:45.755065 ------------------
+On: 2011-10-20 12:57:45.782078 Event: try to Connect to Controller
+On: 2011-10-20 12:57:47.035565 Event: init state
+On: 2011-10-20 12:57:47.035912 Event: Register Account to SIP server
+On: 2011-10-20 12:57:47.036342 Event: 100
+On: 2011-10-20 12:57:47.036429 Event: Caller Handler Ready
+On: 2011-10-20 12:57:52.048843 Event: CALL START
+On: 2011-10-20 12:57:52.048899 Event: Make a call to: 017678038038
+On: 2011-10-20 12:57:53.774258 Event: Call Connecting
+On: 2011-10-20 12:57:53.774305 Event: 200
+On: 2011-10-20 12:58:04.043135 Event: Terminate
+On: 2011-10-20 12:58:04.043178 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 12:58:08.900518 ------------------
+On: 2011-10-20 12:58:08.921122 Event: try to Connect to Controller
+On: 2011-10-20 12:58:10.126774 Event: init state
+On: 2011-10-20 12:58:10.127007 Event: Register Account to SIP server
+On: 2011-10-20 12:58:10.127429 Event: 100
+On: 2011-10-20 12:58:10.127582 Event: Caller Handler Ready
+On: 2011-10-20 12:58:15.140732 Event: CALL START
+On: 2011-10-20 12:58:15.140789 Event: Make a call to: 015128040906
+On: 2011-10-20 12:58:17.878717 Event: Call Connecting
+On: 2011-10-20 12:58:17.878766 Event: 200
+On: 2011-10-20 12:58:27.134800 Event: Terminate
+On: 2011-10-20 12:58:27.134842 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 13:06:29.911603 ------------------
+On: 2011-10-20 13:06:29.932025 Event: try to Connect to Controller
+On: 2011-10-20 13:06:31.233289 Event: init state
+On: 2011-10-20 13:06:31.233542 Event: Register Account to SIP server
+On: 2011-10-20 13:06:31.234028 Event: 100
+On: 2011-10-20 13:06:31.234117 Event: Receiver Handler Ready
+On: 2011-10-20 13:06:31.234655 Event: RECEIVE START
+On: 2011-10-20 13:06:33.821543 Event: {Call "455" <sip:455@132.230.4.8>}
+On: 2011-10-20 13:06:33.822273 Event: Call Connecting
+On: 2011-10-20 13:06:33.822321 Event: 200
+On: 2011-10-20 13:06:33.822571 Event: Answer call
+On: 2011-10-20 13:06:33.822623 Event: Hangup call
+On: 2011-10-20 13:06:33.822802 Event: CALL OK
+On: 2011-10-20 13:06:33.873478 Event: Call Disconnected
+On: 2011-10-20 13:06:35.249484 Event: Terminate
+On: 2011-10-20 13:06:35.249542 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 13:06:39.986753 ------------------
+On: 2011-10-20 13:06:40.006751 Event: try to Connect to Controller
+On: 2011-10-20 13:06:41.296351 Event: init state
+On: 2011-10-20 13:06:41.296602 Event: Register Account to SIP server
+On: 2011-10-20 13:06:41.297009 Event: 100
+On: 2011-10-20 13:06:41.297095 Event: Caller Handler Ready
+On: 2011-10-20 13:06:46.306560 Event: CALL START
+On: 2011-10-20 13:06:46.306615 Event: Make a call to: 017678038038
+On: 2011-10-20 13:06:48.451003 Event: Call Connecting
+On: 2011-10-20 13:06:48.451050 Event: 200
+On: 2011-10-20 13:06:58.303600 Event: Terminate
+On: 2011-10-20 13:06:58.303641 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 13:07:03.081301 ------------------
+On: 2011-10-20 13:07:03.102063 Event: try to Connect to Controller
+On: 2011-10-20 13:07:04.386746 Event: init state
+On: 2011-10-20 13:07:04.387269 Event: Register Account to SIP server
+On: 2011-10-20 13:07:04.387717 Event: 100
+On: 2011-10-20 13:07:04.387804 Event: Caller Handler Ready
+On: 2011-10-20 13:07:09.398341 Event: CALL START
+On: 2011-10-20 13:07:09.398400 Event: Make a call to: 015128040906
+On: 2011-10-20 13:07:11.343432 Event: Call Connecting
+On: 2011-10-20 13:07:11.343479 Event: 200
+On: 2011-10-20 13:07:21.394368 Event: Terminate
+On: 2011-10-20 13:07:21.394409 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 13:07:26.167222 ------------------
+On: 2011-10-20 13:07:26.187436 Event: try to Connect to Controller
+On: 2011-10-20 13:07:27.478650 Event: init state
+On: 2011-10-20 13:07:27.478904 Event: Register Account to SIP server
+On: 2011-10-20 13:07:27.479320 Event: 100
+On: 2011-10-20 13:07:27.479408 Event: Caller Handler Ready
+On: 2011-10-20 13:07:32.492945 Event: CALL START
+On: 2011-10-20 13:07:32.493003 Event: Make a call to: 015252423662
+On: 2011-10-20 13:07:34.222889 Event: Call Connecting
+On: 2011-10-20 13:07:34.222936 Event: 200
+On: 2011-10-20 13:07:44.485979 Event: Terminate
+On: 2011-10-20 13:07:44.486023 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 13:07:49.267054 ------------------
+On: 2011-10-20 13:07:49.286956 Event: try to Connect to Controller
+On: 2011-10-20 13:07:50.561241 Event: init state
+On: 2011-10-20 13:07:50.561489 Event: Register Account to SIP server
+On: 2011-10-20 13:07:50.562113 Event: 100
+On: 2011-10-20 13:07:50.562210 Event: Caller Handler Ready
+On: 2011-10-20 13:08:00.583686 Event: CALL START
+On: 2011-10-20 13:08:00.583743 Event: Make a call to: 07612034661447
+On: 2011-10-20 13:08:00.599846 Event: Number busy or Offline
+On: 2011-10-20 13:08:00.599950 Event: CALL NOT OK
+On: 2011-10-20 13:08:00.600011 Event: Call Disconnected
+On: 2011-10-20 13:08:12.580691 Event: Terminate
+On: 2011-10-20 13:08:12.580735 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 13:08:17.313551 ------------------
+On: 2011-10-20 13:08:17.334024 Event: try to Connect to Controller
+On: 2011-10-20 13:08:18.622725 Event: init state
+On: 2011-10-20 13:08:18.622974 Event: Register Account to SIP server
+On: 2011-10-20 13:08:18.623388 Event: 100
+On: 2011-10-20 13:08:18.623474 Event: Caller Handler Ready
+On: 2011-10-20 13:08:28.644384 Event: CALL START
+On: 2011-10-20 13:08:28.644438 Event: Make a call to: 07612034661455
+On: 2011-10-20 13:08:28.697482 Event: Number busy or Offline
+On: 2011-10-20 13:08:28.697589 Event: CALL NOT OK
+On: 2011-10-20 13:08:28.697648 Event: Call Disconnected
+On: 2011-10-20 13:08:40.641946 Event: Terminate
+On: 2011-10-20 13:08:40.641991 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 13:17:32.849517 ------------------
+On: 2011-10-20 13:17:32.870777 Event: try to Connect to Controller
+On: 2011-10-20 13:17:34.160657 Event: init state
+On: 2011-10-20 13:17:34.160901 Event: Register Account to SIP server
+On: 2011-10-20 13:17:34.161680 Event: 100
+On: 2011-10-20 13:17:34.162295 Event: Receiver Handler Ready
+On: 2011-10-20 13:17:34.162398 Event: RECEIVE START
+On: 2011-10-20 13:17:36.043783 Event: {Call "455" <sip:455@132.230.4.8>}
+On: 2011-10-20 13:17:36.044281 Event: Call Connecting
+On: 2011-10-20 13:17:36.044322 Event: 200
+On: 2011-10-20 13:17:36.044574 Event: Answer call
+On: 2011-10-20 13:17:36.044627 Event: Hangup call
+On: 2011-10-20 13:17:36.044803 Event: CALL OK
+On: 2011-10-20 13:17:36.095486 Event: Call Disconnected
+On: 2011-10-20 13:17:37.487129 Event: Terminate
+On: 2011-10-20 13:17:37.487183 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 13:17:42.221481 ------------------
+On: 2011-10-20 13:17:42.242270 Event: try to Connect to Controller
+On: 2011-10-20 13:17:43.533332 Event: init state
+On: 2011-10-20 13:17:43.533576 Event: Register Account to SIP server
+On: 2011-10-20 13:17:43.534205 Event: 100
+On: 2011-10-20 13:17:43.534302 Event: Caller Handler Ready
+On: 2011-10-20 13:17:48.545598 Event: CALL START
+On: 2011-10-20 13:17:48.545655 Event: Make a call to: 015782677224
+On: 2011-10-20 13:17:50.074064 Event: Call Connecting
+On: 2011-10-20 13:17:50.074112 Event: 200
+On: 2011-10-20 13:18:00.539899 Event: Terminate
+On: 2011-10-20 13:18:00.539940 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 13:18:05.328634 ------------------
+On: 2011-10-20 13:18:05.348886 Event: try to Connect to Controller
+On: 2011-10-20 13:18:06.622993 Event: init state
+On: 2011-10-20 13:18:06.623521 Event: Register Account to SIP server
+On: 2011-10-20 13:18:06.623971 Event: 100
+On: 2011-10-20 13:18:06.624060 Event: Caller Handler Ready
+On: 2011-10-20 13:18:11.637222 Event: CALL START
+On: 2011-10-20 13:18:11.637282 Event: Make a call to: 017678038038
+On: 2011-10-20 13:18:13.852087 Event: Call Connecting
+On: 2011-10-20 13:18:13.852134 Event: 200
+On: 2011-10-20 13:18:23.630096 Event: Terminate
+On: 2011-10-20 13:18:23.630138 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 13:18:28.464227 ------------------
+On: 2011-10-20 13:18:28.508649 Event: try to Connect to Controller
+On: 2011-10-20 13:18:29.714602 Event: init state
+On: 2011-10-20 13:18:29.714853 Event: Register Account to SIP server
+On: 2011-10-20 13:18:29.715607 Event: 100
+On: 2011-10-20 13:18:29.717967 Event: Caller Handler Ready
+On: 2011-10-20 13:18:34.725734 Event: CALL START
+On: 2011-10-20 13:18:34.725791 Event: Make a call to: 015128040906
+On: 2011-10-20 13:18:36.970939 Event: Call Connecting
+On: 2011-10-20 13:18:36.970987 Event: 200
+On: 2011-10-20 13:18:46.726382 Event: Terminate
+On: 2011-10-20 13:18:46.726424 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 13:18:51.479351 ------------------
+On: 2011-10-20 13:18:51.499392 Event: try to Connect to Controller
+On: 2011-10-20 13:18:52.810728 Event: init state
+On: 2011-10-20 13:18:52.810976 Event: Register Account to SIP server
+On: 2011-10-20 13:18:52.811387 Event: 100
+On: 2011-10-20 13:18:52.811472 Event: Caller Handler Ready
+On: 2011-10-20 13:18:57.824846 Event: CALL START
+On: 2011-10-20 13:18:57.824902 Event: Make a call to: 07612034661449
+On: 2011-10-20 13:18:57.849387 Event: Number busy or Offline
+On: 2011-10-20 13:18:57.849489 Event: CALL NOT OK
+On: 2011-10-20 13:18:57.849548 Event: Call Disconnected
+On: 2011-10-20 13:19:09.822369 Event: Terminate
+On: 2011-10-20 13:19:09.822409 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 13:19:14.582692 ------------------
+On: 2011-10-20 13:19:14.603152 Event: try to Connect to Controller
+On: 2011-10-20 13:19:15.899727 Event: init state
+On: 2011-10-20 13:19:15.899975 Event: Register Account to SIP server
+On: 2011-10-20 13:19:15.900390 Event: 100
+On: 2011-10-20 13:19:15.900476 Event: Caller Handler Ready
+On: 2011-10-20 13:19:25.917733 Event: CALL START
+On: 2011-10-20 13:19:25.917789 Event: Make a call to: 07612034661455
+On: 2011-10-20 13:19:25.965504 Event: Number busy or Offline
+On: 2011-10-20 13:19:25.965606 Event: CALL NOT OK
+On: 2011-10-20 13:19:25.965665 Event: Call Disconnected
+On: 2011-10-20 13:19:37.917437 Event: Terminate
+On: 2011-10-20 13:19:37.917481 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 13:35:21.772059 ------------------
+On: 2011-10-20 13:35:21.792391 Event: try to Connect to Controller
+On: 2011-10-20 13:35:23.065870 Event: init state
+On: 2011-10-20 13:35:23.066109 Event: Register Account to SIP server
+On: 2011-10-20 13:35:23.066525 Event: 100
+On: 2011-10-20 13:35:23.066610 Event: Receiver Handler Ready
+On: 2011-10-20 13:35:23.066879 Event: RECEIVE START
+On: 2011-10-20 13:35:25.121809 Event: {Call "447" <sip:447@132.230.4.8>}
+On: 2011-10-20 13:35:25.122323 Event: Call Connecting
+On: 2011-10-20 13:35:25.122364 Event: 200
+On: 2011-10-20 13:35:25.122616 Event: Answer call
+On: 2011-10-20 13:35:25.122667 Event: Hangup call
+On: 2011-10-20 13:35:25.122844 Event: CALL OK
+On: 2011-10-20 13:35:25.173530 Event: Call Disconnected
+On: 2011-10-20 13:35:26.502707 Event: Terminate
+On: 2011-10-20 13:35:26.502751 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 13:35:31.371328 ------------------
+On: 2011-10-20 13:35:31.405687 Event: try to Connect to Controller
+On: 2011-10-20 13:35:32.549400 Event: init state
+On: 2011-10-20 13:35:32.549635 Event: Register Account to SIP server
+On: 2011-10-20 13:35:32.550109 Event: 100
+On: 2011-10-20 13:35:32.550199 Event: Caller Handler Ready
+On: 2011-10-20 13:35:37.558034 Event: CALL START
+On: 2011-10-20 13:35:37.558090 Event: Make a call to: 017678038038
+On: 2011-10-20 13:35:40.067110 Event: Call Connecting
+On: 2011-10-20 13:35:40.067159 Event: 200
+On: 2011-10-20 13:35:49.555669 Event: Terminate
+On: 2011-10-20 13:35:49.555710 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 13:35:54.394984 ------------------
+On: 2011-10-20 13:35:54.442549 Event: try to Connect to Controller
+On: 2011-10-20 13:35:55.638384 Event: init state
+On: 2011-10-20 13:35:55.638908 Event: Register Account to SIP server
+On: 2011-10-20 13:35:55.639355 Event: 100
+On: 2011-10-20 13:35:55.639443 Event: Caller Handler Ready
+On: 2011-10-20 13:36:00.648947 Event: CALL START
+On: 2011-10-20 13:36:00.648997 Event: Make a call to: 015128040906
+On: 2011-10-20 13:36:02.886941 Event: Call Connecting
+On: 2011-10-20 13:36:02.886989 Event: 200
+On: 2011-10-20 13:36:12.644162 Event: Terminate
+On: 2011-10-20 13:36:12.644202 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 13:36:17.447718 ------------------
+On: 2011-10-20 13:36:17.468050 Event: try to Connect to Controller
+On: 2011-10-20 13:36:18.726742 Event: init state
+On: 2011-10-20 13:36:18.726965 Event: Register Account to SIP server
+On: 2011-10-20 13:36:18.727375 Event: 100
+On: 2011-10-20 13:36:18.727460 Event: Caller Handler Ready
+On: 2011-10-20 13:36:23.740910 Event: CALL START
+On: 2011-10-20 13:36:23.740958 Event: Make a call to: 015252423662
+On: 2011-10-20 13:36:25.762052 Event: Call Connecting
+On: 2011-10-20 13:36:25.762101 Event: 200
+On: 2011-10-20 13:36:35.734008 Event: Terminate
+On: 2011-10-20 13:36:35.734048 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 13:36:40.638540 ------------------
+On: 2011-10-20 13:36:40.660789 Event: try to Connect to Controller
+On: 2011-10-20 13:36:41.809421 Event: init state
+On: 2011-10-20 13:36:41.809651 Event: Register Account to SIP server
+On: 2011-10-20 13:36:41.810612 Event: 100
+On: 2011-10-20 13:36:41.810708 Event: Caller Handler Ready
+On: 2011-10-20 13:36:51.832623 Event: CALL START
+On: 2011-10-20 13:36:51.832680 Event: Make a call to: 07612034661455
+On: 2011-10-20 13:36:51.872455 Event: Number busy or Offline
+On: 2011-10-20 13:36:51.872558 Event: CALL NOT OK
+On: 2011-10-20 13:36:51.872618 Event: Call Disconnected
+On: 2011-10-20 13:37:03.830088 Event: Terminate
+On: 2011-10-20 13:37:03.830135 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 13:37:08.615447 ------------------
+On: 2011-10-20 13:37:08.636034 Event: try to Connect to Controller
+On: 2011-10-20 13:37:09.889008 Event: init state
+On: 2011-10-20 13:37:09.889254 Event: Register Account to SIP server
+On: 2011-10-20 13:37:09.890228 Event: 100
+On: 2011-10-20 13:37:09.892653 Event: Caller Handler Ready
+On: 2011-10-20 13:37:19.909776 Event: CALL START
+On: 2011-10-20 13:37:19.909846 Event: Make a call to: 07612034661447
+On: 2011-10-20 13:37:19.959848 Event: Number busy or Offline
+On: 2011-10-20 13:37:19.960029 Event: CALL NOT OK
+On: 2011-10-20 13:37:19.960093 Event: Call Disconnected
+On: 2011-10-20 13:37:31.908329 Event: Terminate
+On: 2011-10-20 13:37:31.908386 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 13:53:13.032607 ------------------
+On: 2011-10-20 13:53:13.053004 Event: try to Connect to Controller
+On: 2011-10-20 13:53:14.341352 Event: init state
+On: 2011-10-20 13:53:14.341599 Event: Register Account to SIP server
+On: 2011-10-20 13:53:14.342192 Event: 100
+On: 2011-10-20 13:53:14.342288 Event: Receiver Handler Ready
+On: 2011-10-20 13:53:14.342716 Event: RECEIVE START
+On: 2011-10-20 13:53:16.380196 Event: {Call "455" <sip:455@132.230.4.8>}
+On: 2011-10-20 13:53:16.380692 Event: Call Connecting
+On: 2011-10-20 13:53:16.380730 Event: 200
+On: 2011-10-20 13:53:16.380983 Event: Answer call
+On: 2011-10-20 13:53:16.381036 Event: Hangup call
+On: 2011-10-20 13:53:16.381213 Event: CALL OK
+On: 2011-10-20 13:53:16.431893 Event: Call Disconnected
+On: 2011-10-20 13:53:17.668206 Event: Terminate
+On: 2011-10-20 13:53:17.668263 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 13:53:22.396456 ------------------
+On: 2011-10-20 13:53:22.417163 Event: try to Connect to Controller
+On: 2011-10-20 13:53:23.715123 Event: init state
+On: 2011-10-20 13:53:23.715376 Event: Register Account to SIP server
+On: 2011-10-20 13:53:23.715790 Event: 100
+On: 2011-10-20 13:53:23.715876 Event: Caller Handler Ready
+On: 2011-10-20 13:53:28.728905 Event: CALL START
+On: 2011-10-20 13:53:28.728963 Event: Make a call to: 015782677224
+On: 2011-10-20 13:53:30.964379 Event: Call Connecting
+On: 2011-10-20 13:53:30.964428 Event: 200
+On: 2011-10-20 13:53:40.722729 Event: Terminate
+On: 2011-10-20 13:53:40.722769 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 13:53:45.500470 ------------------
+On: 2011-10-20 13:53:45.520504 Event: try to Connect to Controller
+On: 2011-10-20 13:53:46.807239 Event: init state
+On: 2011-10-20 13:53:46.807585 Event: Register Account to SIP server
+On: 2011-10-20 13:53:46.808371 Event: 100
+On: 2011-10-20 13:53:46.809871 Event: Caller Handler Ready
+On: 2011-10-20 13:53:51.817735 Event: CALL START
+On: 2011-10-20 13:53:51.817791 Event: Make a call to: 017678038038
+On: 2011-10-20 13:53:54.066839 Event: Call Connecting
+On: 2011-10-20 13:53:54.066888 Event: 200
+On: 2011-10-20 13:54:03.815292 Event: Terminate
+On: 2011-10-20 13:54:03.815334 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 13:54:08.595584 ------------------
+On: 2011-10-20 13:54:08.616150 Event: try to Connect to Controller
+On: 2011-10-20 13:54:09.902684 Event: init state
+On: 2011-10-20 13:54:09.902940 Event: Register Account to SIP server
+On: 2011-10-20 13:54:09.903356 Event: 100
+On: 2011-10-20 13:54:09.903442 Event: Caller Handler Ready
+On: 2011-10-20 13:54:14.916043 Event: CALL START
+On: 2011-10-20 13:54:14.916100 Event: Make a call to: 015128040906
+On: 2011-10-20 13:54:16.908001 Event: Call Connecting
+On: 2011-10-20 13:54:16.908049 Event: 200
+On: 2011-10-20 13:54:26.910011 Event: Terminate
+On: 2011-10-20 13:54:26.910053 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 13:54:31.698547 ------------------
+On: 2011-10-20 13:54:31.720641 Event: try to Connect to Controller
+On: 2011-10-20 13:54:32.974634 Event: init state
+On: 2011-10-20 13:54:32.974877 Event: Register Account to SIP server
+On: 2011-10-20 13:54:32.975295 Event: 100
+On: 2011-10-20 13:54:32.975380 Event: Caller Handler Ready
+On: 2011-10-20 13:54:42.994107 Event: CALL START
+On: 2011-10-20 13:54:42.994163 Event: Make a call to: 07612034661447
+On: 2011-10-20 13:54:43.036611 Event: Number busy or Offline
+On: 2011-10-20 13:54:43.036716 Event: CALL NOT OK
+On: 2011-10-20 13:54:43.036777 Event: Call Disconnected
+On: 2011-10-20 13:54:54.991567 Event: Terminate
+On: 2011-10-20 13:54:54.991611 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 13:54:59.811560 ------------------
+On: 2011-10-20 13:54:59.859998 Event: try to Connect to Controller
+On: 2011-10-20 13:55:01.036854 Event: init state
+On: 2011-10-20 13:55:01.037093 Event: Register Account to SIP server
+On: 2011-10-20 13:55:01.037515 Event: 100
+On: 2011-10-20 13:55:01.037601 Event: Caller Handler Ready
+On: 2011-10-20 13:55:06.045740 Event: CALL START
+On: 2011-10-20 13:55:06.045798 Event: Make a call to: 015252423662
+On: 2011-10-20 13:55:08.061292 Event: Call Connecting
+On: 2011-10-20 13:55:08.061338 Event: 200
+On: 2011-10-20 13:55:18.043180 Event: Terminate
+On: 2011-10-20 13:55:18.043223 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 13:55:22.836143 ------------------
+On: 2011-10-20 13:55:22.857601 Event: try to Connect to Controller
+On: 2011-10-20 13:55:24.126747 Event: init state
+On: 2011-10-20 13:55:24.126999 Event: Register Account to SIP server
+On: 2011-10-20 13:55:24.127777 Event: 100
+On: 2011-10-20 13:55:24.129788 Event: Caller Handler Ready
+On: 2011-10-20 13:55:29.140831 Event: CALL START
+On: 2011-10-20 13:55:29.140887 Event: Make a call to: 07612034661449
+On: 2011-10-20 13:55:29.158094 Event: Number busy or Offline
+On: 2011-10-20 13:55:29.158197 Event: CALL NOT OK
+On: 2011-10-20 13:55:29.158256 Event: Call Disconnected
+On: 2011-10-20 13:55:41.134702 Event: Terminate
+On: 2011-10-20 13:55:41.134743 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 13:55:45.895496 ------------------
+On: 2011-10-20 13:55:45.915630 Event: try to Connect to Controller
+On: 2011-10-20 13:55:47.214296 Event: init state
+On: 2011-10-20 13:55:47.214551 Event: Register Account to SIP server
+On: 2011-10-20 13:55:47.214970 Event: 100
+On: 2011-10-20 13:55:47.215068 Event: Caller Handler Ready
+On: 2011-10-20 13:55:57.235432 Event: CALL START
+On: 2011-10-20 13:55:57.235491 Event: Make a call to: 07612034661455
+On: 2011-10-20 13:55:57.282200 Event: Number busy or Offline
+On: 2011-10-20 13:55:57.282306 Event: CALL NOT OK
+On: 2011-10-20 13:55:57.282366 Event: Call Disconnected
+On: 2011-10-20 13:56:09.234831 Event: Terminate
+On: 2011-10-20 13:56:09.234888 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 13:56:13.997225 ------------------
+On: 2011-10-20 13:56:14.017948 Event: try to Connect to Controller
+On: 2011-10-20 13:56:15.281047 Event: init state
+On: 2011-10-20 13:56:15.281292 Event: Register Account to SIP server
+On: 2011-10-20 13:56:15.281763 Event: 100
+On: 2011-10-20 13:56:15.281852 Event: Caller Handler Ready
+On: 2011-10-20 13:56:20.296818 Event: CALL START
+On: 2011-10-20 13:56:20.296875 Event: Make a call to: 015782677224
+On: 2011-10-20 13:56:21.797904 Event: Call Connecting
+On: 2011-10-20 13:56:21.797949 Event: 200
+On: 2011-10-20 13:56:32.292368 Event: Terminate
+On: 2011-10-20 13:56:32.292409 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 13:56:37.131386 ------------------
+On: 2011-10-20 13:56:37.158725 Event: try to Connect to Controller
+On: 2011-10-20 13:56:38.375661 Event: init state
+On: 2011-10-20 13:56:38.375915 Event: Register Account to SIP server
+On: 2011-10-20 13:56:38.376330 Event: 100
+On: 2011-10-20 13:56:38.376417 Event: Caller Handler Ready
+On: 2011-10-20 13:56:43.388813 Event: CALL START
+On: 2011-10-20 13:56:43.388870 Event: Make a call to: 017678038038
+On: 2011-10-20 13:56:45.919484 Event: Call Connecting
+On: 2011-10-20 13:56:45.919531 Event: 200
+On: 2011-10-20 13:56:55.382997 Event: Terminate
+On: 2011-10-20 13:56:55.383036 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 13:57:00.280291 ------------------
+On: 2011-10-20 13:57:00.300582 Event: try to Connect to Controller
+On: 2011-10-20 13:57:01.472849 Event: init state
+On: 2011-10-20 13:57:01.473086 Event: Register Account to SIP server
+On: 2011-10-20 13:57:01.473500 Event: 100
+On: 2011-10-20 13:57:01.473586 Event: Caller Handler Ready
+On: 2011-10-20 13:57:06.484838 Event: CALL START
+On: 2011-10-20 13:57:06.484894 Event: Make a call to: 015128040906
+On: 2011-10-20 13:57:09.012864 Event: Call Connecting
+On: 2011-10-20 13:57:09.012915 Event: 200
+On: 2011-10-20 13:57:18.479724 Event: Terminate
+On: 2011-10-20 13:57:18.479763 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:03:21.992048 ------------------
+On: 2011-10-20 14:03:22.012520 Event: try to Connect to Controller
+On: 2011-10-20 14:03:23.322732 Event: init state
+On: 2011-10-20 14:03:23.322983 Event: Register Account to SIP server
+On: 2011-10-20 14:03:23.323399 Event: 100
+On: 2011-10-20 14:03:23.323483 Event: Receiver Handler Ready
+On: 2011-10-20 14:03:23.323899 Event: RECEIVE START
+On: 2011-10-20 14:03:25.135222 Event: {Call "455" <sip:455@132.230.4.8>}
+On: 2011-10-20 14:03:25.135723 Event: Call Connecting
+On: 2011-10-20 14:03:25.135764 Event: 200
+On: 2011-10-20 14:03:25.136021 Event: Answer call
+On: 2011-10-20 14:03:25.136073 Event: Hangup call
+On: 2011-10-20 14:03:25.136247 Event: CALL OK
+On: 2011-10-20 14:03:25.186938 Event: Call Disconnected
+On: 2011-10-20 14:03:26.630417 Event: Terminate
+On: 2011-10-20 14:03:26.630475 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:03:31.337367 ------------------
+On: 2011-10-20 14:03:31.358021 Event: try to Connect to Controller
+On: 2011-10-20 14:03:32.676338 Event: init state
+On: 2011-10-20 14:03:32.676587 Event: Register Account to SIP server
+On: 2011-10-20 14:03:32.677360 Event: 100
+On: 2011-10-20 14:03:32.679957 Event: Caller Handler Ready
+On: 2011-10-20 14:03:37.688817 Event: CALL START
+On: 2011-10-20 14:03:37.688871 Event: Make a call to: 015782677224
+On: 2011-10-20 14:03:39.699899 Event: Call Connecting
+On: 2011-10-20 14:03:39.699946 Event: 200
+On: 2011-10-20 14:03:49.683647 Event: Terminate
+On: 2011-10-20 14:03:49.683689 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:03:54.442319 ------------------
+On: 2011-10-20 14:03:54.462703 Event: try to Connect to Controller
+On: 2011-10-20 14:03:55.766669 Event: init state
+On: 2011-10-20 14:03:55.767173 Event: Register Account to SIP server
+On: 2011-10-20 14:03:55.767959 Event: 100
+On: 2011-10-20 14:03:55.769899 Event: Caller Handler Ready
+On: 2011-10-20 14:04:00.780975 Event: CALL START
+On: 2011-10-20 14:04:00.781032 Event: Make a call to: 017678038038
+On: 2011-10-20 14:04:03.013251 Event: Call Connecting
+On: 2011-10-20 14:04:03.013298 Event: 200
+On: 2011-10-20 14:04:12.774943 Event: Terminate
+On: 2011-10-20 14:04:12.774985 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:04:17.537416 ------------------
+On: 2011-10-20 14:04:17.558067 Event: try to Connect to Controller
+On: 2011-10-20 14:04:18.859438 Event: init state
+On: 2011-10-20 14:04:18.859689 Event: Register Account to SIP server
+On: 2011-10-20 14:04:18.860107 Event: 100
+On: 2011-10-20 14:04:18.860194 Event: Caller Handler Ready
+On: 2011-10-20 14:04:23.872912 Event: CALL START
+On: 2011-10-20 14:04:23.872968 Event: Make a call to: 015252423662
+On: 2011-10-20 14:04:25.642591 Event: Call Connecting
+On: 2011-10-20 14:04:25.642637 Event: 200
+On: 2011-10-20 14:04:35.867066 Event: Terminate
+On: 2011-10-20 14:04:35.867107 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:04:40.630939 ------------------
+On: 2011-10-20 14:04:40.651645 Event: try to Connect to Controller
+On: 2011-10-20 14:04:41.950903 Event: init state
+On: 2011-10-20 14:04:41.951156 Event: Register Account to SIP server
+On: 2011-10-20 14:04:41.951569 Event: 100
+On: 2011-10-20 14:04:41.951656 Event: Caller Handler Ready
+On: 2011-10-20 14:04:46.964808 Event: CALL START
+On: 2011-10-20 14:04:46.964864 Event: Make a call to: 07612034661449
+On: 2011-10-20 14:04:46.998434 Event: Number busy or Offline
+On: 2011-10-20 14:04:46.998535 Event: CALL NOT OK
+On: 2011-10-20 14:04:46.998595 Event: Call Disconnected
+On: 2011-10-20 14:04:58.958303 Event: Terminate
+On: 2011-10-20 14:04:58.958345 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:05:03.720085 ------------------
+On: 2011-10-20 14:05:03.740482 Event: try to Connect to Controller
+On: 2011-10-20 14:05:05.041598 Event: init state
+On: 2011-10-20 14:05:05.042026 Event: Register Account to SIP server
+On: 2011-10-20 14:05:05.042823 Event: 100
+On: 2011-10-20 14:05:05.045277 Event: Caller Handler Ready
+On: 2011-10-20 14:05:10.052951 Event: CALL START
+On: 2011-10-20 14:05:10.053007 Event: Make a call to: 015128040906
+On: 2011-10-20 14:05:13.261127 Event: Call Connecting
+On: 2011-10-20 14:05:13.261174 Event: 200
+On: 2011-10-20 14:05:22.047646 Event: Terminate
+On: 2011-10-20 14:05:22.047687 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:05:26.803942 ------------------
+On: 2011-10-20 14:05:26.825040 Event: try to Connect to Controller
+On: 2011-10-20 14:05:28.120050 Event: init state
+On: 2011-10-20 14:05:28.120291 Event: Register Account to SIP server
+On: 2011-10-20 14:05:28.120710 Event: 100
+On: 2011-10-20 14:05:28.120796 Event: Caller Handler Ready
+On: 2011-10-20 14:05:38.143738 Event: CALL START
+On: 2011-10-20 14:05:38.143797 Event: Make a call to: 07612034661447
+On: 2011-10-20 14:05:38.186278 Event: Number busy or Offline
+On: 2011-10-20 14:05:38.186380 Event: CALL NOT OK
+On: 2011-10-20 14:05:38.186440 Event: Call Disconnected
+On: 2011-10-20 14:05:50.141108 Event: Terminate
+On: 2011-10-20 14:05:50.141151 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:05:54.855376 ------------------
+On: 2011-10-20 14:05:54.876274 Event: try to Connect to Controller
+On: 2011-10-20 14:05:56.183818 Event: init state
+On: 2011-10-20 14:05:56.184065 Event: Register Account to SIP server
+On: 2011-10-20 14:05:56.184479 Event: 100
+On: 2011-10-20 14:05:56.184565 Event: Caller Handler Ready
+On: 2011-10-20 14:06:06.207834 Event: CALL START
+On: 2011-10-20 14:06:06.207893 Event: Make a call to: 07612034661455
+On: 2011-10-20 14:06:06.241439 Event: Number busy or Offline
+On: 2011-10-20 14:06:06.241545 Event: CALL NOT OK
+On: 2011-10-20 14:06:06.241605 Event: Call Disconnected
+On: 2011-10-20 14:06:18.205246 Event: Terminate
+On: 2011-10-20 14:06:18.205290 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:10:10.941404 ------------------
+On: 2011-10-20 14:10:10.961917 Event: try to Connect to Controller
+On: 2011-10-20 14:10:12.263115 Event: init state
+On: 2011-10-20 14:10:12.263363 Event: Register Account to SIP server
+On: 2011-10-20 14:10:12.263786 Event: 100
+On: 2011-10-20 14:10:12.263871 Event: Receiver Handler Ready
+On: 2011-10-20 14:10:12.264280 Event: RECEIVE START
+On: 2011-10-20 14:10:15.160702 Event: {Call "455" <sip:455@132.230.4.8>}
+On: 2011-10-20 14:10:15.161197 Event: Call Connecting
+On: 2011-10-20 14:10:15.161238 Event: 200
+On: 2011-10-20 14:10:15.161581 Event: Answer call
+On: 2011-10-20 14:10:15.161650 Event: Hangup call
+On: 2011-10-20 14:10:15.162045 Event: CALL OK
+On: 2011-10-20 14:10:15.212804 Event: Call Disconnected
+On: 2011-10-20 14:10:16.084642 Event: Terminate
+On: 2011-10-20 14:10:16.084694 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:10:20.801174 ------------------
+On: 2011-10-20 14:10:20.822753 Event: try to Connect to Controller
+On: 2011-10-20 14:10:22.130100 Event: init state
+On: 2011-10-20 14:10:22.130352 Event: Register Account to SIP server
+On: 2011-10-20 14:10:22.130760 Event: 100
+On: 2011-10-20 14:10:22.130840 Event: Caller Handler Ready
+On: 2011-10-20 14:10:27.140827 Event: CALL START
+On: 2011-10-20 14:10:27.140883 Event: Make a call to: 015782677224
+On: 2011-10-20 14:10:29.316718 Event: Call Connecting
+On: 2011-10-20 14:10:29.316764 Event: 200
+On: 2011-10-20 14:10:39.135669 Event: Terminate
+On: 2011-10-20 14:10:39.135711 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:10:43.897591 ------------------
+On: 2011-10-20 14:10:43.918031 Event: try to Connect to Controller
+On: 2011-10-20 14:10:45.219116 Event: init state
+On: 2011-10-20 14:10:45.219642 Event: Register Account to SIP server
+On: 2011-10-20 14:10:45.220440 Event: 100
+On: 2011-10-20 14:10:45.221936 Event: Caller Handler Ready
+On: 2011-10-20 14:10:50.232942 Event: CALL START
+On: 2011-10-20 14:10:50.232997 Event: Make a call to: 017678038038
+On: 2011-10-20 14:10:52.260507 Event: Call Connecting
+On: 2011-10-20 14:10:52.260553 Event: 200
+On: 2011-10-20 14:11:02.227167 Event: Terminate
+On: 2011-10-20 14:11:02.227207 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:11:06.994882 ------------------
+On: 2011-10-20 14:11:07.015205 Event: try to Connect to Controller
+On: 2011-10-20 14:11:08.311352 Event: init state
+On: 2011-10-20 14:11:08.311605 Event: Register Account to SIP server
+On: 2011-10-20 14:11:08.312024 Event: 100
+On: 2011-10-20 14:11:08.312108 Event: Caller Handler Ready
+On: 2011-10-20 14:11:13.320958 Event: CALL START
+On: 2011-10-20 14:11:13.321014 Event: Make a call to: 015252423662
+On: 2011-10-20 14:11:15.816509 Event: Call Connecting
+On: 2011-10-20 14:11:15.816556 Event: 200
+On: 2011-10-20 14:11:25.316697 Event: Terminate
+On: 2011-10-20 14:11:25.316739 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:11:30.070261 ------------------
+On: 2011-10-20 14:11:30.090444 Event: try to Connect to Controller
+On: 2011-10-20 14:11:31.398949 Event: init state
+On: 2011-10-20 14:11:31.399200 Event: Register Account to SIP server
+On: 2011-10-20 14:11:31.399618 Event: 100
+On: 2011-10-20 14:11:31.399700 Event: Caller Handler Ready
+On: 2011-10-20 14:11:36.410614 Event: CALL START
+On: 2011-10-20 14:11:36.410669 Event: Make a call to: 015128040906
+On: 2011-10-20 14:11:38.893115 Event: Call Connecting
+On: 2011-10-20 14:11:38.893162 Event: 200
+On: 2011-10-20 14:11:48.406321 Event: Terminate
+On: 2011-10-20 14:11:48.406363 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:11:53.172009 ------------------
+On: 2011-10-20 14:11:53.192293 Event: try to Connect to Controller
+On: 2011-10-20 14:11:54.478769 Event: init state
+On: 2011-10-20 14:11:54.479009 Event: Register Account to SIP server
+On: 2011-10-20 14:11:54.479431 Event: 100
+On: 2011-10-20 14:11:54.479516 Event: Caller Handler Ready
+On: 2011-10-20 14:12:04.497627 Event: CALL START
+On: 2011-10-20 14:12:04.497682 Event: Make a call to: 07612034661447
+On: 2011-10-20 14:12:06.037669 Event: Call Connecting
+On: 2011-10-20 14:12:06.037878 Event: 200
+On: 2011-10-20 14:12:06.223800 Event: Terminate
+On: 2011-10-20 14:12:06.223858 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:15:54.608428 ------------------
+On: 2011-10-20 14:15:54.628604 Event: try to Connect to Controller
+On: 2011-10-20 14:15:55.938620 Event: init state
+On: 2011-10-20 14:15:55.938869 Event: Register Account to SIP server
+On: 2011-10-20 14:15:55.939650 Event: 100
+On: 2011-10-20 14:15:55.939736 Event: Receiver Handler Ready
+On: 2011-10-20 14:15:55.940144 Event: RECEIVE START
+On: 2011-10-20 14:15:57.905443 Event: {Call "455" <sip:455@132.230.4.8>}
+On: 2011-10-20 14:15:57.906177 Event: Call Connecting
+On: 2011-10-20 14:15:57.906227 Event: 200
+On: 2011-10-20 14:15:57.906478 Event: Answer call
+On: 2011-10-20 14:15:57.906532 Event: Hangup call
+On: 2011-10-20 14:15:57.906711 Event: CALL OK
+On: 2011-10-20 14:15:57.957377 Event: Call Disconnected
+On: 2011-10-20 14:15:59.286512 Event: Terminate
+On: 2011-10-20 14:15:59.286570 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:16:04.004681 ------------------
+On: 2011-10-20 14:16:04.025106 Event: try to Connect to Controller
+On: 2011-10-20 14:16:05.331806 Event: init state
+On: 2011-10-20 14:16:05.332058 Event: Register Account to SIP server
+On: 2011-10-20 14:16:05.332474 Event: 100
+On: 2011-10-20 14:16:05.332562 Event: Caller Handler Ready
+On: 2011-10-20 14:16:10.344633 Event: CALL START
+On: 2011-10-20 14:16:10.344689 Event: Make a call to: 015782677224
+On: 2011-10-20 14:16:12.061380 Event: Call Connecting
+On: 2011-10-20 14:16:12.061428 Event: 200
+On: 2011-10-20 14:16:22.339185 Event: Terminate
+On: 2011-10-20 14:16:22.339225 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:16:27.110322 ------------------
+On: 2011-10-20 14:16:27.130475 Event: try to Connect to Controller
+On: 2011-10-20 14:16:28.423306 Event: init state
+On: 2011-10-20 14:16:28.423828 Event: Register Account to SIP server
+On: 2011-10-20 14:16:28.424355 Event: 100
+On: 2011-10-20 14:16:28.424444 Event: Caller Handler Ready
+On: 2011-10-20 14:16:33.435001 Event: CALL START
+On: 2011-10-20 14:16:33.435060 Event: Make a call to: 017678038038
+On: 2011-10-20 14:16:35.178741 Event: Call Connecting
+On: 2011-10-20 14:16:35.178790 Event: 200
+On: 2011-10-20 14:16:45.431843 Event: Terminate
+On: 2011-10-20 14:16:45.431885 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:16:50.251277 ------------------
+On: 2011-10-20 14:16:50.271599 Event: try to Connect to Controller
+On: 2011-10-20 14:16:51.514717 Event: init state
+On: 2011-10-20 14:16:51.514967 Event: Register Account to SIP server
+On: 2011-10-20 14:16:51.515708 Event: 100
+On: 2011-10-20 14:16:51.515797 Event: Caller Handler Ready
+On: 2011-10-20 14:16:56.528911 Event: CALL START
+On: 2011-10-20 14:16:56.528969 Event: Make a call to: 015252423662
+On: 2011-10-20 14:16:58.767184 Event: Call Connecting
+On: 2011-10-20 14:16:58.767232 Event: 200
+On: 2011-10-20 14:17:08.522573 Event: Terminate
+On: 2011-10-20 14:17:08.522614 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:17:13.348318 ------------------
+On: 2011-10-20 14:17:13.368834 Event: try to Connect to Controller
+On: 2011-10-20 14:17:14.606967 Event: init state
+On: 2011-10-20 14:17:14.607218 Event: Register Account to SIP server
+On: 2011-10-20 14:17:14.607993 Event: 100
+On: 2011-10-20 14:17:14.609921 Event: Caller Handler Ready
+On: 2011-10-20 14:17:19.620811 Event: CALL START
+On: 2011-10-20 14:17:19.620863 Event: Make a call to: 015128040906
+On: 2011-10-20 14:17:21.405893 Event: Call Connecting
+On: 2011-10-20 14:17:21.405940 Event: 200
+On: 2011-10-20 14:17:31.614835 Event: Terminate
+On: 2011-10-20 14:17:31.614875 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:17:36.431142 ------------------
+On: 2011-10-20 14:17:36.451057 Event: try to Connect to Controller
+On: 2011-10-20 14:17:37.687912 Event: init state
+On: 2011-10-20 14:17:37.688162 Event: Register Account to SIP server
+On: 2011-10-20 14:17:37.688580 Event: 100
+On: 2011-10-20 14:17:37.688667 Event: Caller Handler Ready
+On: 2011-10-20 14:17:47.707143 Event: CALL START
+On: 2011-10-20 14:17:47.707200 Event: Make a call to: 07612034661447
+On: 2011-10-20 14:17:49.703318 Event: Call Connecting
+On: 2011-10-20 14:17:49.703367 Event: 200
+On: 2011-10-20 14:17:49.902936 Event: Terminate
+On: 2011-10-20 14:17:49.902994 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:21:25.667570 ------------------
+On: 2011-10-20 14:21:25.687932 Event: try to Connect to Controller
+On: 2011-10-20 14:21:27.003880 Event: init state
+On: 2011-10-20 14:21:27.004130 Event: Register Account to SIP server
+On: 2011-10-20 14:21:27.004548 Event: 100
+On: 2011-10-20 14:21:27.004633 Event: Receiver Handler Ready
+On: 2011-10-20 14:21:27.005050 Event: RECEIVE START
+On: 2011-10-20 14:21:29.068422 Event: {Call "447" <sip:447@132.230.4.8>}
+On: 2011-10-20 14:21:29.068918 Event: Call Connecting
+On: 2011-10-20 14:21:29.068957 Event: 200
+On: 2011-10-20 14:21:29.069200 Event: Answer call
+On: 2011-10-20 14:21:29.069252 Event: Hangup call
+On: 2011-10-20 14:21:29.069426 Event: CALL OK
+On: 2011-10-20 14:21:29.120115 Event: Call Disconnected
+On: 2011-10-20 14:21:30.451746 Event: Terminate
+On: 2011-10-20 14:21:30.451802 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:21:35.315159 ------------------
+On: 2011-10-20 14:21:35.338508 Event: try to Connect to Controller
+On: 2011-10-20 14:21:36.519565 Event: init state
+On: 2011-10-20 14:21:36.519807 Event: Register Account to SIP server
+On: 2011-10-20 14:21:36.520585 Event: 100
+On: 2011-10-20 14:21:36.520669 Event: Caller Handler Ready
+On: 2011-10-20 14:21:41.542356 Event: CALL START
+On: 2011-10-20 14:21:41.542410 Event: Make a call to: 015782677224
+On: 2011-10-20 14:21:44.050882 Event: Call Connecting
+On: 2011-10-20 14:21:44.050927 Event: 200
+On: 2011-10-20 14:21:53.537821 Event: Terminate
+On: 2011-10-20 14:21:53.537864 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:21:58.299434 ------------------
+On: 2011-10-20 14:21:58.319798 Event: try to Connect to Controller
+On: 2011-10-20 14:21:59.622701 Event: init state
+On: 2011-10-20 14:21:59.623240 Event: Register Account to SIP server
+On: 2011-10-20 14:21:59.623683 Event: 100
+On: 2011-10-20 14:21:59.623768 Event: Caller Handler Ready
+On: 2011-10-20 14:22:04.636899 Event: CALL START
+On: 2011-10-20 14:22:04.636951 Event: Make a call to: 017678038038
+On: 2011-10-20 14:22:06.918066 Event: Call Connecting
+On: 2011-10-20 14:22:06.918116 Event: 200
+On: 2011-10-20 14:22:16.630513 Event: Terminate
+On: 2011-10-20 14:22:16.630556 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:22:21.386830 ------------------
+On: 2011-10-20 14:22:21.406682 Event: try to Connect to Controller
+On: 2011-10-20 14:22:22.714508 Event: init state
+On: 2011-10-20 14:22:22.714755 Event: Register Account to SIP server
+On: 2011-10-20 14:22:22.715168 Event: 100
+On: 2011-10-20 14:22:22.715254 Event: Caller Handler Ready
+On: 2011-10-20 14:22:27.724955 Event: CALL START
+On: 2011-10-20 14:22:27.725017 Event: Make a call to: 015128040906
+On: 2011-10-20 14:22:30.261824 Event: Call Connecting
+On: 2011-10-20 14:22:30.261871 Event: 200
+On: 2011-10-20 14:22:39.719650 Event: Terminate
+On: 2011-10-20 14:22:39.719692 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:22:44.480592 ------------------
+On: 2011-10-20 14:22:44.500792 Event: try to Connect to Controller
+On: 2011-10-20 14:22:45.801360 Event: init state
+On: 2011-10-20 14:22:45.801599 Event: Register Account to SIP server
+On: 2011-10-20 14:22:45.802068 Event: 100
+On: 2011-10-20 14:22:45.802160 Event: Caller Handler Ready
+On: 2011-10-20 14:22:50.809733 Event: CALL START
+On: 2011-10-20 14:22:50.809787 Event: Make a call to: 015252423662
+On: 2011-10-20 14:22:52.790598 Event: Call Connecting
+On: 2011-10-20 14:22:52.790645 Event: 200
+On: 2011-10-20 14:23:02.807648 Event: Terminate
+On: 2011-10-20 14:23:02.807691 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:26:23.367145 ------------------
+On: 2011-10-20 14:26:23.387530 Event: try to Connect to Controller
+On: 2011-10-20 14:26:24.696779 Event: init state
+On: 2011-10-20 14:26:24.697032 Event: Register Account to SIP server
+On: 2011-10-20 14:26:24.697455 Event: 100
+On: 2011-10-20 14:26:24.697541 Event: Receiver Handler Ready
+On: 2011-10-20 14:26:24.698141 Event: RECEIVE START
+On: 2011-10-20 14:26:26.818817 Event: {Call "455" <sip:455@132.230.4.8>}
+On: 2011-10-20 14:26:26.819370 Event: Call Connecting
+On: 2011-10-20 14:26:26.819417 Event: 200
+On: 2011-10-20 14:26:26.819660 Event: Answer call
+On: 2011-10-20 14:26:26.819710 Event: Hangup call
+On: 2011-10-20 14:26:26.819883 Event: CALL OK
+On: 2011-10-20 14:26:26.870568 Event: Call Disconnected
+On: 2011-10-20 14:26:28.014809 Event: Terminate
+On: 2011-10-20 14:26:28.014866 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:26:32.735457 ------------------
+On: 2011-10-20 14:26:32.756069 Event: try to Connect to Controller
+On: 2011-10-20 14:26:34.058672 Event: init state
+On: 2011-10-20 14:26:34.058918 Event: Register Account to SIP server
+On: 2011-10-20 14:26:34.059336 Event: 100
+On: 2011-10-20 14:26:34.059422 Event: Caller Handler Ready
+On: 2011-10-20 14:26:39.068828 Event: CALL START
+On: 2011-10-20 14:26:39.068885 Event: Make a call to: 015782677224
+On: 2011-10-20 14:26:40.791667 Event: Call Connecting
+On: 2011-10-20 14:26:40.791714 Event: 200
+On: 2011-10-20 14:26:51.063643 Event: Terminate
+On: 2011-10-20 14:26:51.063684 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:26:55.827417 ------------------
+On: 2011-10-20 14:26:55.847672 Event: try to Connect to Controller
+On: 2011-10-20 14:26:57.146506 Event: init state
+On: 2011-10-20 14:26:57.147034 Event: Register Account to SIP server
+On: 2011-10-20 14:26:57.147477 Event: 100
+On: 2011-10-20 14:26:57.147563 Event: Caller Handler Ready
+On: 2011-10-20 14:27:02.160800 Event: CALL START
+On: 2011-10-20 14:27:02.160854 Event: Make a call to: 017678038038
+On: 2011-10-20 14:27:04.754189 Event: Call Connecting
+On: 2011-10-20 14:27:04.754237 Event: 200
+On: 2011-10-20 14:27:14.153960 Event: Terminate
+On: 2011-10-20 14:27:14.154002 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:27:18.983272 ------------------
+On: 2011-10-20 14:27:19.003927 Event: try to Connect to Controller
+On: 2011-10-20 14:27:20.235773 Event: init state
+On: 2011-10-20 14:27:20.236019 Event: Register Account to SIP server
+On: 2011-10-20 14:27:20.236431 Event: 100
+On: 2011-10-20 14:27:20.236516 Event: Caller Handler Ready
+On: 2011-10-20 14:27:25.243796 Event: CALL START
+On: 2011-10-20 14:27:25.243852 Event: Make a call to: 015128040906
+On: 2011-10-20 14:27:27.453177 Event: Call Connecting
+On: 2011-10-20 14:27:27.453227 Event: 200
+On: 2011-10-20 14:27:37.243007 Event: Terminate
+On: 2011-10-20 14:27:37.243047 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:27:41.988735 ------------------
+On: 2011-10-20 14:27:42.009090 Event: try to Connect to Controller
+On: 2011-10-20 14:27:43.312911 Event: init state
+On: 2011-10-20 14:27:43.313164 Event: Register Account to SIP server
+On: 2011-10-20 14:27:43.313583 Event: 100
+On: 2011-10-20 14:27:43.313668 Event: Caller Handler Ready
+On: 2011-10-20 14:27:53.335135 Event: CALL START
+On: 2011-10-20 14:27:53.335193 Event: Make a call to: 07612034661447
+On: 2011-10-20 14:27:55.825594 Event: Call Connecting
+On: 2011-10-20 14:27:55.825645 Event: 200
+On: 2011-10-20 14:27:56.031579 Event: Terminate
+On: 2011-10-20 14:27:56.031635 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:28:00.743623 ------------------
+On: 2011-10-20 14:28:00.764113 Event: try to Connect to Controller
+On: 2011-10-20 14:28:02.078181 Event: init state
+On: 2011-10-20 14:28:02.078439 Event: Register Account to SIP server
+On: 2011-10-20 14:28:02.078854 Event: 100
+On: 2011-10-20 14:28:02.078940 Event: Caller Handler Ready
+On: 2011-10-20 14:28:07.088842 Event: CALL START
+On: 2011-10-20 14:28:07.088904 Event: Make a call to: 015252423662
+On: 2011-10-20 14:28:09.567641 Event: Call Connecting
+On: 2011-10-20 14:28:09.567689 Event: 200
+On: 2011-10-20 14:28:19.083636 Event: Terminate
+On: 2011-10-20 14:28:19.083677 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:28:23.848794 ------------------
+On: 2011-10-20 14:28:23.869178 Event: try to Connect to Controller
+On: 2011-10-20 14:28:25.166349 Event: init state
+On: 2011-10-20 14:28:25.166601 Event: Register Account to SIP server
+On: 2011-10-20 14:28:25.167017 Event: 100
+On: 2011-10-20 14:28:25.167102 Event: Caller Handler Ready
+On: 2011-10-20 14:28:30.176925 Event: CALL START
+On: 2011-10-20 14:28:30.176978 Event: Make a call to: 07612034661449
+On: 2011-10-20 14:28:32.569564 Event: Call Connecting
+On: 2011-10-20 14:28:32.569612 Event: 200
+On: 2011-10-20 14:28:32.770170 Event: Terminate
+On: 2011-10-20 14:28:32.770211 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:33:25.771664 ------------------
+On: 2011-10-20 14:33:25.792136 Event: try to Connect to Controller
+On: 2011-10-20 14:33:27.081231 Event: init state
+On: 2011-10-20 14:33:27.081474 Event: Register Account to SIP server
+On: 2011-10-20 14:33:27.082110 Event: 100
+On: 2011-10-20 14:33:27.082208 Event: Receiver Handler Ready
+On: 2011-10-20 14:33:27.082604 Event: RECEIVE START
+On: 2011-10-20 14:33:29.579394 Event: {Call "455" <sip:455@132.230.4.8>}
+On: 2011-10-20 14:33:29.579896 Event: Call Connecting
+On: 2011-10-20 14:33:29.579938 Event: 200
+On: 2011-10-20 14:33:29.580192 Event: Answer call
+On: 2011-10-20 14:33:29.580243 Event: Hangup call
+On: 2011-10-20 14:33:29.580415 Event: CALL OK
+On: 2011-10-20 14:33:29.631103 Event: Call Disconnected
+On: 2011-10-20 14:33:30.352833 Event: Terminate
+On: 2011-10-20 14:33:30.352888 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:33:35.093011 ------------------
+On: 2011-10-20 14:33:35.113549 Event: try to Connect to Controller
+On: 2011-10-20 14:33:36.398078 Event: init state
+On: 2011-10-20 14:33:36.398336 Event: Register Account to SIP server
+On: 2011-10-20 14:33:36.399111 Event: 100
+On: 2011-10-20 14:33:36.399196 Event: Caller Handler Ready
+On: 2011-10-20 14:33:41.408942 Event: CALL START
+On: 2011-10-20 14:33:41.408998 Event: Make a call to: 015782677224
+On: 2011-10-20 14:33:42.893838 Event: Call Connecting
+On: 2011-10-20 14:33:42.893886 Event: 200
+On: 2011-10-20 14:33:53.403654 Event: Terminate
+On: 2011-10-20 14:33:53.403696 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:33:58.172851 ------------------
+On: 2011-10-20 14:33:58.193248 Event: try to Connect to Controller
+On: 2011-10-20 14:33:59.487102 Event: init state
+On: 2011-10-20 14:33:59.487625 Event: Register Account to SIP server
+On: 2011-10-20 14:33:59.488423 Event: 100
+On: 2011-10-20 14:33:59.489912 Event: Caller Handler Ready
+On: 2011-10-20 14:34:04.500938 Event: CALL START
+On: 2011-10-20 14:34:04.500993 Event: Make a call to: 017678038038
+On: 2011-10-20 14:34:06.740368 Event: Call Connecting
+On: 2011-10-20 14:34:06.740414 Event: 200
+On: 2011-10-20 14:34:16.494947 Event: Terminate
+On: 2011-10-20 14:34:16.494987 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:34:21.279923 ------------------
+On: 2011-10-20 14:34:21.300046 Event: try to Connect to Controller
+On: 2011-10-20 14:34:22.578897 Event: init state
+On: 2011-10-20 14:34:22.579148 Event: Register Account to SIP server
+On: 2011-10-20 14:34:22.579561 Event: 100
+On: 2011-10-20 14:34:22.579645 Event: Caller Handler Ready
+On: 2011-10-20 14:34:27.592911 Event: CALL START
+On: 2011-10-20 14:34:27.592966 Event: Make a call to: 015128040906
+On: 2011-10-20 14:34:29.592427 Event: Call Connecting
+On: 2011-10-20 14:34:29.592474 Event: 200
+On: 2011-10-20 14:34:39.586809 Event: Terminate
+On: 2011-10-20 14:34:39.586851 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:34:44.363348 ------------------
+On: 2011-10-20 14:34:44.383755 Event: try to Connect to Controller
+On: 2011-10-20 14:34:45.670666 Event: init state
+On: 2011-10-20 14:34:45.670912 Event: Register Account to SIP server
+On: 2011-10-20 14:34:45.671326 Event: 100
+On: 2011-10-20 14:34:45.671407 Event: Caller Handler Ready
+On: 2011-10-20 14:34:50.683974 Event: CALL START
+On: 2011-10-20 14:34:50.684028 Event: Make a call to: 015252423662
+On: 2011-10-20 14:34:52.674379 Event: Call Connecting
+On: 2011-10-20 14:34:52.674426 Event: 200
+On: 2011-10-20 14:35:02.677951 Event: Terminate
+On: 2011-10-20 14:35:02.677995 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:35:07.440187 ------------------
+On: 2011-10-20 14:35:07.460484 Event: try to Connect to Controller
+On: 2011-10-20 14:35:08.748968 Event: init state
+On: 2011-10-20 14:35:08.749219 Event: Register Account to SIP server
+On: 2011-10-20 14:35:08.749642 Event: 100
+On: 2011-10-20 14:35:08.750822 Event: Caller Handler Ready
+On: 2011-10-20 14:35:18.772133 Event: CALL START
+On: 2011-10-20 14:35:18.772192 Event: Make a call to: 07612034661447
+On: 2011-10-20 14:35:20.971816 Event: Call Connecting
+On: 2011-10-20 14:35:20.971864 Event: 200
+On: 2011-10-20 14:35:21.144302 Event: Terminate
+On: 2011-10-20 14:35:21.144361 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:40:07.289306 ------------------
+On: 2011-10-20 14:40:07.309642 Event: try to Connect to Controller
+On: 2011-10-20 14:40:08.610544 Event: init state
+On: 2011-10-20 14:40:08.610788 Event: Register Account to SIP server
+On: 2011-10-20 14:40:08.611194 Event: 100
+On: 2011-10-20 14:40:08.611277 Event: Receiver Handler Ready
+On: 2011-10-20 14:40:08.611693 Event: RECEIVE START
+On: 2011-10-20 14:40:10.688525 Event: {Call "447" <sip:447@132.230.4.8>}
+On: 2011-10-20 14:40:10.689019 Event: Call Connecting
+On: 2011-10-20 14:40:10.689059 Event: 200
+On: 2011-10-20 14:40:10.689311 Event: Answer call
+On: 2011-10-20 14:40:10.689364 Event: Hangup call
+On: 2011-10-20 14:40:10.689540 Event: CALL OK
+On: 2011-10-20 14:40:10.740227 Event: Call Disconnected
+On: 2011-10-20 14:40:12.071250 Event: Terminate
+On: 2011-10-20 14:40:12.071304 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:40:16.783801 ------------------
+On: 2011-10-20 14:40:16.804072 Event: try to Connect to Controller
+On: 2011-10-20 14:40:18.116584 Event: init state
+On: 2011-10-20 14:40:18.116835 Event: Register Account to SIP server
+On: 2011-10-20 14:40:18.117252 Event: 100
+On: 2011-10-20 14:40:18.117337 Event: Caller Handler Ready
+On: 2011-10-20 14:40:23.128845 Event: CALL START
+On: 2011-10-20 14:40:23.128900 Event: Make a call to: 015782677224
+On: 2011-10-20 14:40:25.612400 Event: Call Connecting
+On: 2011-10-20 14:40:25.612448 Event: 200
+On: 2011-10-20 14:40:35.123816 Event: Terminate
+On: 2011-10-20 14:40:35.123858 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:40:39.878888 ------------------
+On: 2011-10-20 14:40:39.898964 Event: try to Connect to Controller
+On: 2011-10-20 14:40:41.206700 Event: init state
+On: 2011-10-20 14:40:41.207041 Event: Register Account to SIP server
+On: 2011-10-20 14:40:41.207465 Event: 100
+On: 2011-10-20 14:40:41.207553 Event: Caller Handler Ready
+On: 2011-10-20 14:40:46.218543 Event: CALL START
+On: 2011-10-20 14:40:46.218601 Event: Make a call to: 017678038038
+On: 2011-10-20 14:40:48.499422 Event: Call Connecting
+On: 2011-10-20 14:40:48.499469 Event: 200
+On: 2011-10-20 14:40:58.218277 Event: Terminate
+On: 2011-10-20 14:40:58.218318 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:41:03.049650 ------------------
+On: 2011-10-20 14:41:03.070310 Event: try to Connect to Controller
+On: 2011-10-20 14:41:04.301546 Event: init state
+On: 2011-10-20 14:41:04.301841 Event: Register Account to SIP server
+On: 2011-10-20 14:41:04.302259 Event: 100
+On: 2011-10-20 14:41:04.302347 Event: Caller Handler Ready
+On: 2011-10-20 14:41:09.310518 Event: CALL START
+On: 2011-10-20 14:41:09.310572 Event: Make a call to: 015252423662
+On: 2011-10-20 14:41:11.314924 Event: Call Connecting
+On: 2011-10-20 14:41:11.314972 Event: 200
+On: 2011-10-20 14:41:21.307647 Event: Terminate
+On: 2011-10-20 14:41:21.307688 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:41:26.070302 ------------------
+On: 2011-10-20 14:41:26.090581 Event: try to Connect to Controller
+On: 2011-10-20 14:41:27.391072 Event: init state
+On: 2011-10-20 14:41:27.391323 Event: Register Account to SIP server
+On: 2011-10-20 14:41:27.391725 Event: 100
+On: 2011-10-20 14:41:27.391804 Event: Caller Handler Ready
+On: 2011-10-20 14:41:32.404915 Event: CALL START
+On: 2011-10-20 14:41:32.404969 Event: Make a call to: 015128040906
+On: 2011-10-20 14:41:34.175924 Event: Call Connecting
+On: 2011-10-20 14:41:34.175970 Event: 200
+On: 2011-10-20 14:41:44.398311 Event: Terminate
+On: 2011-10-20 14:41:44.398353 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:41:49.166682 ------------------
+On: 2011-10-20 14:41:49.186621 Event: try to Connect to Controller
+On: 2011-10-20 14:41:50.482855 Event: init state
+On: 2011-10-20 14:41:50.483102 Event: Register Account to SIP server
+On: 2011-10-20 14:41:50.483518 Event: 100
+On: 2011-10-20 14:41:50.483602 Event: Caller Handler Ready
+On: 2011-10-20 14:41:55.492949 Event: CALL START
+On: 2011-10-20 14:41:55.493005 Event: Make a call to: 07612034661449
+On: 2011-10-20 14:41:58.295212 Event: Call Connecting
+On: 2011-10-20 14:41:58.295260 Event: 200
+On: 2011-10-20 14:41:58.482168 Event: Terminate
+On: 2011-10-20 14:41:58.482208 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:56:45.888139 ------------------
+On: 2011-10-20 14:56:45.909973 Event: try to Connect to Controller
+On: 2011-10-20 14:56:47.198105 Event: init state
+On: 2011-10-20 14:56:47.198339 Event: Register Account to SIP server
+On: 2011-10-20 14:56:47.198765 Event: 100
+On: 2011-10-20 14:56:47.198847 Event: Receiver Handler Ready
+On: 2011-10-20 14:56:47.199109 Event: RECEIVE START
+On: 2011-10-20 14:56:49.904684 Event: {Call "447" <sip:447@132.230.4.8>}
+On: 2011-10-20 14:56:49.905180 Event: Call Connecting
+On: 2011-10-20 14:56:49.905222 Event: 200
+On: 2011-10-20 14:56:49.905475 Event: Answer call
+On: 2011-10-20 14:56:49.905527 Event: Hangup call
+On: 2011-10-20 14:56:49.905764 Event: CALL OK
+On: 2011-10-20 14:56:49.956451 Event: Call Disconnected
+On: 2011-10-20 14:56:51.114809 Event: Terminate
+On: 2011-10-20 14:56:51.114854 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:56:55.911987 ------------------
+On: 2011-10-20 14:56:55.935322 Event: try to Connect to Controller
+On: 2011-10-20 14:56:57.165273 Event: init state
+On: 2011-10-20 14:56:57.165503 Event: Register Account to SIP server
+On: 2011-10-20 14:56:57.165973 Event: 100
+On: 2011-10-20 14:56:57.166057 Event: Caller Handler Ready
+On: 2011-10-20 14:57:02.175069 Event: CALL START
+On: 2011-10-20 14:57:02.175124 Event: Make a call to: 017678038038
+On: 2011-10-20 14:57:03.878956 Event: Call Connecting
+On: 2011-10-20 14:57:03.879002 Event: 200
+On: 2011-10-20 14:57:14.171636 Event: Terminate
+On: 2011-10-20 14:57:14.171677 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:57:19.173559 ------------------
+On: 2011-10-20 14:57:19.209475 Event: try to Connect to Controller
+On: 2011-10-20 14:57:20.288955 Event: init state
+On: 2011-10-20 14:57:20.289478 Event: Register Account to SIP server
+On: 2011-10-20 14:57:20.289981 Event: 100
+On: 2011-10-20 14:57:20.290068 Event: Caller Handler Ready
+On: 2011-10-20 14:57:25.297733 Event: CALL START
+On: 2011-10-20 14:57:25.297787 Event: Make a call to: 015128040906
+On: 2011-10-20 14:57:27.773796 Event: Call Connecting
+On: 2011-10-20 14:57:27.773843 Event: 200
+On: 2011-10-20 14:57:37.295660 Event: Terminate
+On: 2011-10-20 14:57:37.295701 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:57:42.128571 ------------------
+On: 2011-10-20 14:57:42.148926 Event: try to Connect to Controller
+On: 2011-10-20 14:57:43.379028 Event: init state
+On: 2011-10-20 14:57:43.379279 Event: Register Account to SIP server
+On: 2011-10-20 14:57:43.379697 Event: 100
+On: 2011-10-20 14:57:43.379785 Event: Caller Handler Ready
+On: 2011-10-20 14:57:48.392826 Event: CALL START
+On: 2011-10-20 14:57:48.392881 Event: Make a call to: 015252423662
+On: 2011-10-20 14:57:50.393472 Event: Call Connecting
+On: 2011-10-20 14:57:50.393521 Event: 200
+On: 2011-10-20 14:58:00.387113 Event: Terminate
+On: 2011-10-20 14:58:00.387159 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:58:05.246850 ------------------
+On: 2011-10-20 14:58:05.268122 Event: try to Connect to Controller
+On: 2011-10-20 14:58:06.469294 Event: init state
+On: 2011-10-20 14:58:06.469549 Event: Register Account to SIP server
+On: 2011-10-20 14:58:06.470536 Event: 100
+On: 2011-10-20 14:58:06.472893 Event: Caller Handler Ready
+On: 2011-10-20 14:58:11.480943 Event: CALL START
+On: 2011-10-20 14:58:11.480996 Event: Make a call to: 015782677224
+On: 2011-10-20 14:58:13.250676 Event: Call Connecting
+On: 2011-10-20 14:58:13.250723 Event: 200
+On: 2011-10-20 14:58:23.475676 Event: Terminate
+On: 2011-10-20 14:58:23.475718 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:58:28.370058 ------------------
+On: 2011-10-20 14:58:28.404224 Event: try to Connect to Controller
+On: 2011-10-20 14:58:29.558572 Event: init state
+On: 2011-10-20 14:58:29.558813 Event: Register Account to SIP server
+On: 2011-10-20 14:58:29.559233 Event: 100
+On: 2011-10-20 14:58:29.559318 Event: Caller Handler Ready
+On: 2011-10-20 14:58:34.569281 Event: CALL START
+On: 2011-10-20 14:58:34.569351 Event: Make a call to: 07612034661449
+On: 2011-10-20 14:58:36.357228 Event: Call Connecting
+On: 2011-10-20 14:58:36.357277 Event: 200
+On: 2011-10-20 14:58:36.542236 Event: Terminate
+On: 2011-10-20 14:58:36.542275 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 15:01:15.265615 ------------------
+On: 2011-10-20 15:01:15.286071 Event: try to Connect to Controller
+On: 2011-10-20 15:01:16.593094 Event: init state
+On: 2011-10-20 15:01:16.593337 Event: Register Account to SIP server
+On: 2011-10-20 15:01:16.594306 Event: 100
+On: 2011-10-20 15:01:16.596631 Event: Caller Handler Ready
+On: 2011-10-20 15:01:21.604946 Event: CALL START
+On: 2011-10-20 15:01:21.605000 Event: Make a call to: 015782677224
+On: 2011-10-20 15:01:23.884057 Event: Call Connecting
+On: 2011-10-20 15:01:23.884105 Event: 200
+On: 2011-10-20 15:01:33.599659 Event: Terminate
+On: 2011-10-20 15:01:33.599699 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 15:01:38.358010 ------------------
+On: 2011-10-20 15:01:38.378035 Event: try to Connect to Controller
+On: 2011-10-20 15:01:39.682248 Event: init state
+On: 2011-10-20 15:01:39.682500 Event: Register Account to SIP server
+On: 2011-10-20 15:01:39.682920 Event: 100
+On: 2011-10-20 15:01:39.683007 Event: Caller Handler Ready
+On: 2011-10-20 15:01:44.692946 Event: CALL START
+On: 2011-10-20 15:01:44.692997 Event: Make a call to: 017678038038
+On: 2011-10-20 15:01:46.924841 Event: Call Connecting
+On: 2011-10-20 15:01:46.924887 Event: 200
+On: 2011-10-20 15:01:56.687661 Event: Terminate
+On: 2011-10-20 15:01:56.687701 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 15:02:01.469480 ------------------
+On: 2011-10-20 15:02:01.490012 Event: try to Connect to Controller
+On: 2011-10-20 15:02:02.770480 Event: init state
+On: 2011-10-20 15:02:02.771003 Event: Register Account to SIP server
+On: 2011-10-20 15:02:02.771428 Event: 100
+On: 2011-10-20 15:02:02.771510 Event: Caller Handler Ready
+On: 2011-10-20 15:02:07.784914 Event: CALL START
+On: 2011-10-20 15:02:07.784972 Event: Make a call to: 015128040906
+On: 2011-10-20 15:02:10.044096 Event: Call Connecting
+On: 2011-10-20 15:02:10.044144 Event: 200
+On: 2011-10-20 15:02:19.778730 Event: Terminate
+On: 2011-10-20 15:02:19.778771 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 15:02:24.544522 ------------------
+On: 2011-10-20 15:02:24.565352 Event: try to Connect to Controller
+On: 2011-10-20 15:02:25.862200 Event: init state
+On: 2011-10-20 15:02:25.862454 Event: Register Account to SIP server
+On: 2011-10-20 15:02:25.862873 Event: 100
+On: 2011-10-20 15:02:25.862958 Event: Caller Handler Ready
+On: 2011-10-20 15:02:30.872955 Event: CALL START
+On: 2011-10-20 15:02:30.873012 Event: Make a call to: 015252423662
+On: 2011-10-20 15:02:33.367228 Event: Call Connecting
+On: 2011-10-20 15:02:33.367276 Event: 200
+On: 2011-10-20 15:02:42.867642 Event: Terminate
+On: 2011-10-20 15:02:42.867682 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 15:02:47.625407 ------------------
+On: 2011-10-20 15:02:47.645663 Event: try to Connect to Controller
+On: 2011-10-20 15:02:48.940915 Event: init state
+On: 2011-10-20 15:02:48.941168 Event: Register Account to SIP server
+On: 2011-10-20 15:02:48.941587 Event: 100
+On: 2011-10-20 15:02:48.941671 Event: Caller Handler Ready
+On: 2011-10-20 15:02:58.956579 Event: CALL START
+On: 2011-10-20 15:02:58.956638 Event: Make a call to: 07612034661447
+On: 2011-10-20 15:03:00.900981 Event: Call Connecting
+On: 2011-10-20 15:03:00.901037 Event: 200
+On: 2011-10-20 15:03:01.107767 Event: Terminate
+On: 2011-10-20 15:03:01.107826 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 15:17:17.307258 ------------------
+On: 2011-10-20 15:17:17.327655 Event: try to Connect to Controller
+On: 2011-10-20 15:17:18.637886 Event: init state
+On: 2011-10-20 15:17:18.638142 Event: Register Account to SIP server
+On: 2011-10-20 15:17:18.638558 Event: 100
+On: 2011-10-20 15:17:18.638641 Event: Caller Handler Ready
+On: 2011-10-20 15:17:23.648003 Event: CALL START
+On: 2011-10-20 15:17:23.648058 Event: Make a call to: 015782677224
+On: 2011-10-20 15:17:25.617585 Event: Call Connecting
+On: 2011-10-20 15:17:25.617633 Event: 200
+On: 2011-10-20 15:17:35.643621 Event: Terminate
+On: 2011-10-20 15:17:35.643664 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 15:17:40.407432 ------------------
+On: 2011-10-20 15:17:40.427809 Event: try to Connect to Controller
+On: 2011-10-20 15:17:41.726745 Event: init state
+On: 2011-10-20 15:17:41.726983 Event: Register Account to SIP server
+On: 2011-10-20 15:17:41.727402 Event: 100
+On: 2011-10-20 15:17:41.727488 Event: Caller Handler Ready
+On: 2011-10-20 15:17:46.740920 Event: CALL START
+On: 2011-10-20 15:17:46.740975 Event: Make a call to: 017678038038
+On: 2011-10-20 15:17:48.463022 Event: Call Connecting
+On: 2011-10-20 15:17:48.463070 Event: 200
+On: 2011-10-20 15:17:58.734069 Event: Terminate
+On: 2011-10-20 15:17:58.734110 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 15:18:03.763270 ------------------
+On: 2011-10-20 15:18:03.810291 Event: try to Connect to Controller
+On: 2011-10-20 15:18:04.819200 Event: init state
+On: 2011-10-20 15:18:04.819442 Event: Register Account to SIP server
+On: 2011-10-20 15:18:04.819859 Event: 100
+On: 2011-10-20 15:18:04.819966 Event: Caller Handler Ready
+On: 2011-10-20 15:18:09.831180 Event: CALL START
+On: 2011-10-20 15:18:09.831237 Event: Make a call to: 015128040906
+On: 2011-10-20 15:18:11.604116 Event: Call Connecting
+On: 2011-10-20 15:18:11.604164 Event: 200
+On: 2011-10-20 15:18:21.828830 Event: Terminate
+On: 2011-10-20 15:18:21.828871 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 15:18:26.771572 ------------------
+On: 2011-10-20 15:18:26.799477 Event: try to Connect to Controller
+On: 2011-10-20 15:18:27.941640 Event: init state
+On: 2011-10-20 15:18:27.941946 Event: Register Account to SIP server
+On: 2011-10-20 15:18:27.942368 Event: 100
+On: 2011-10-20 15:18:27.942456 Event: Caller Handler Ready
+On: 2011-10-20 15:18:32.949752 Event: CALL START
+On: 2011-10-20 15:18:32.949813 Event: Make a call to: 015252423662
+On: 2011-10-20 15:18:35.473865 Event: Call Connecting
+On: 2011-10-20 15:18:35.473925 Event: 200
+On: 2011-10-20 15:18:44.949548 Event: Terminate
+On: 2011-10-20 15:18:44.949589 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 15:18:49.912103 ------------------
+On: 2011-10-20 15:18:49.940181 Event: try to Connect to Controller
+On: 2011-10-20 15:18:51.021257 Event: init state
+On: 2011-10-20 15:18:51.021495 Event: Register Account to SIP server
+On: 2011-10-20 15:18:51.021966 Event: 100
+On: 2011-10-20 15:18:51.022054 Event: Caller Handler Ready
+On: 2011-10-20 15:19:01.041763 Event: CALL START
+On: 2011-10-20 15:19:01.041835 Event: Make a call to: 07612034661447
+On: 2011-10-20 15:19:04.135963 Event: Call Connecting
+On: 2011-10-20 15:19:04.136016 Event: 200
+On: 2011-10-20 15:19:04.321249 Event: Terminate
+On: 2011-10-20 15:19:04.321292 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 15:24:07.218813 ------------------
+On: 2011-10-20 15:24:07.263519 Event: try to Connect to Controller
+On: 2011-10-20 15:24:08.130777 Event: init state
+On: 2011-10-20 15:24:08.131013 Event: Register Account to SIP server
+On: 2011-10-20 15:24:08.131455 Event: 100
+On: 2011-10-20 15:24:08.131540 Event: Caller Handler Ready
+On: 2011-10-20 15:24:13.137759 Event: CALL START
+On: 2011-10-20 15:24:13.137820 Event: Make a call to: 015782677224
+On: 2011-10-20 15:24:14.911916 Event: Call Connecting
+On: 2011-10-20 15:24:14.911966 Event: 200
+On: 2011-10-20 15:24:25.142302 Event: Terminate
+On: 2011-10-20 15:24:25.142345 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 15:24:30.266111 ------------------
+On: 2011-10-20 15:24:30.308783 Event: try to Connect to Controller
+On: 2011-10-20 15:24:31.266230 Event: init state
+On: 2011-10-20 15:24:31.266469 Event: Register Account to SIP server
+On: 2011-10-20 15:24:31.266894 Event: 100
+On: 2011-10-20 15:24:31.266977 Event: Caller Handler Ready
+On: 2011-10-20 15:24:36.273733 Event: CALL START
+On: 2011-10-20 15:24:36.273789 Event: Make a call to: 017678038038
+On: 2011-10-20 15:24:38.011247 Event: Call Connecting
+On: 2011-10-20 15:24:38.011298 Event: 200
+On: 2011-10-20 15:24:48.273992 Event: Terminate
+On: 2011-10-20 15:24:48.274037 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 15:24:53.035356 ------------------
+On: 2011-10-20 15:24:53.082748 Event: try to Connect to Controller
+On: 2011-10-20 15:24:54.356921 Event: init state
+On: 2011-10-20 15:24:54.357159 Event: Register Account to SIP server
+On: 2011-10-20 15:24:54.357585 Event: 100
+On: 2011-10-20 15:24:54.357672 Event: Caller Handler Ready
+On: 2011-10-20 15:24:59.365751 Event: CALL START
+On: 2011-10-20 15:24:59.365814 Event: Make a call to: 015128040906
+On: 2011-10-20 15:25:00.829349 Event: Call Connecting
+On: 2011-10-20 15:25:00.829398 Event: 200
+On: 2011-10-20 15:25:11.363767 Event: Terminate
+On: 2011-10-20 15:25:11.363812 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 15:25:16.156740 ------------------
+On: 2011-10-20 15:25:16.198021 Event: try to Connect to Controller
+On: 2011-10-20 15:25:17.468489 Event: init state
+On: 2011-10-20 15:25:17.468730 Event: Register Account to SIP server
+On: 2011-10-20 15:25:17.469514 Event: 100
+On: 2011-10-20 15:25:17.469602 Event: Caller Handler Ready
+On: 2011-10-20 15:25:22.477787 Event: CALL START
+On: 2011-10-20 15:25:22.477846 Event: Make a call to: 015252423662
+On: 2011-10-20 15:25:24.190209 Event: Call Connecting
+On: 2011-10-20 15:25:24.190258 Event: 200
+On: 2011-10-20 15:25:34.477999 Event: Terminate
+On: 2011-10-20 15:25:34.478046 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 15:25:39.713342 ------------------
+On: 2011-10-20 15:25:39.761962 Event: try to Connect to Controller
+On: 2011-10-20 15:25:40.557065 Event: init state
+On: 2011-10-20 15:25:40.557311 Event: Register Account to SIP server
+On: 2011-10-20 15:25:40.558167 Event: 100
+On: 2011-10-20 15:25:40.558259 Event: Caller Handler Ready
+On: 2011-10-20 15:25:50.582560 Event: CALL START
+On: 2011-10-20 15:25:50.582630 Event: Make a call to: 07612034661447
+On: 2011-10-20 15:25:53.254286 Event: Call Connecting
+On: 2011-10-20 15:25:53.254336 Event: 200
+On: 2011-10-20 15:25:53.417415 Event: Terminate
+On: 2011-10-20 15:25:53.417459 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 16:03:32.399657 ------------------
+On: 2011-10-20 16:03:32.441699 Event: try to Connect to Controller
+On: 2011-10-20 16:03:33.661850 Event: init state
+On: 2011-10-20 16:03:33.662093 Event: Register Account to SIP server
+On: 2011-10-20 16:03:33.662508 Event: 100
+On: 2011-10-20 16:03:33.662596 Event: Caller Handler Ready
+On: 2011-10-20 16:03:38.669755 Event: CALL START
+On: 2011-10-20 16:03:38.669821 Event: Make a call to: 017678038038
+On: 2011-10-20 16:03:40.287379 Event: Call Connecting
+On: 2011-10-20 16:03:40.287427 Event: 200
+On: 2011-10-20 16:03:50.667715 Event: Terminate
+On: 2011-10-20 16:03:50.667758 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 16:03:55.486600 ------------------
+On: 2011-10-20 16:03:55.513103 Event: try to Connect to Controller
+On: 2011-10-20 16:03:56.754341 Event: init state
+On: 2011-10-20 16:03:56.754580 Event: Register Account to SIP server
+On: 2011-10-20 16:03:56.755003 Event: 100
+On: 2011-10-20 16:03:56.755087 Event: Caller Handler Ready
+On: 2011-10-20 16:04:01.761900 Event: CALL START
+On: 2011-10-20 16:04:01.761957 Event: Make a call to: 015128040906
+On: 2011-10-20 16:04:04.271760 Event: Call Connecting
+On: 2011-10-20 16:04:04.271810 Event: 200
+On: 2011-10-20 16:04:13.766363 Event: Terminate
+On: 2011-10-20 16:04:13.766405 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 16:04:18.525652 ------------------
+On: 2011-10-20 16:04:18.546102 Event: try to Connect to Controller
+On: 2011-10-20 16:04:19.846776 Event: init state
+On: 2011-10-20 16:04:19.847012 Event: Register Account to SIP server
+On: 2011-10-20 16:04:19.847432 Event: 100
+On: 2011-10-20 16:04:19.847518 Event: Caller Handler Ready
+On: 2011-10-20 16:04:24.855330 Event: CALL START
+On: 2011-10-20 16:04:24.855394 Event: Make a call to: 015252423662
+On: 2011-10-20 16:04:26.896321 Event: Call Connecting
+On: 2011-10-20 16:04:26.896371 Event: 200
+On: 2011-10-20 16:04:36.852339 Event: Terminate
+On: 2011-10-20 16:04:36.852383 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 16:07:52.503036 ------------------
+On: 2011-10-20 16:07:52.526378 Event: try to Connect to Controller
+On: 2011-10-20 16:07:53.750773 Event: init state
+On: 2011-10-20 16:07:53.751010 Event: Register Account to SIP server
+On: 2011-10-20 16:07:53.751438 Event: 100
+On: 2011-10-20 16:07:53.751524 Event: Caller Handler Ready
+On: 2011-10-20 16:07:58.763094 Event: CALL START
+On: 2011-10-20 16:07:58.763159 Event: Make a call to: 017678038038
+On: 2011-10-20 16:08:01.291988 Event: Call Connecting
+On: 2011-10-20 16:08:01.292036 Event: 200
+On: 2011-10-20 16:08:10.758837 Event: Terminate
+On: 2011-10-20 16:08:10.758879 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 16:08:15.630300 ------------------
+On: 2011-10-20 16:08:15.656898 Event: try to Connect to Controller
+On: 2011-10-20 16:08:16.854785 Event: init state
+On: 2011-10-20 16:08:16.855037 Event: Register Account to SIP server
+On: 2011-10-20 16:08:16.855459 Event: 100
+On: 2011-10-20 16:08:16.855546 Event: Caller Handler Ready
+On: 2011-10-20 16:08:21.864818 Event: CALL START
+On: 2011-10-20 16:08:21.864874 Event: Make a call to: 015128040906
+On: 2011-10-20 16:08:23.646054 Event: Call Connecting
+On: 2011-10-20 16:08:23.646105 Event: 200
+On: 2011-10-20 16:08:33.865733 Event: Terminate
+On: 2011-10-20 16:08:33.865777 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 16:08:38.674245 ------------------
+On: 2011-10-20 16:08:38.694595 Event: try to Connect to Controller
+On: 2011-10-20 16:08:39.947613 Event: init state
+On: 2011-10-20 16:08:39.947851 Event: Register Account to SIP server
+On: 2011-10-20 16:08:39.948269 Event: 100
+On: 2011-10-20 16:08:39.948354 Event: Caller Handler Ready
+On: 2011-10-20 16:08:44.957734 Event: CALL START
+On: 2011-10-20 16:08:44.957791 Event: Make a call to: 015252423662
+On: 2011-10-20 16:08:47.506658 Event: Call Connecting
+On: 2011-10-20 16:08:47.506706 Event: 200
+On: 2011-10-20 16:08:56.955279 Event: Terminate
+On: 2011-10-20 16:08:56.955320 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 16:09:01.828655 ------------------
+On: 2011-10-20 16:09:01.849095 Event: try to Connect to Controller
+On: 2011-10-20 16:09:03.054270 Event: init state
+On: 2011-10-20 16:09:03.054509 Event: Register Account to SIP server
+On: 2011-10-20 16:09:03.055288 Event: 100
+On: 2011-10-20 16:09:03.055372 Event: Caller Handler Ready
+On: 2011-10-20 16:09:08.063013 Event: CALL START
+On: 2011-10-20 16:09:08.063081 Event: Make a call to: 015782677224
+On: 2011-10-20 16:09:10.249137 Event: Call Connecting
+On: 2011-10-20 16:09:10.249186 Event: 200
+On: 2011-10-20 16:09:20.062023 Event: Terminate
+On: 2011-10-20 16:09:20.062065 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 16:14:04.266375 ------------------
+On: 2011-10-20 16:14:04.286624 Event: try to Connect to Controller
+On: 2011-10-20 16:14:05.574394 Event: init state
+On: 2011-10-20 16:14:05.574647 Event: Register Account to SIP server
+On: 2011-10-20 16:14:05.575075 Event: 100
+On: 2011-10-20 16:14:05.575159 Event: Caller Handler Ready
+On: 2011-10-20 16:14:10.584830 Event: CALL START
+On: 2011-10-20 16:14:10.584887 Event: Make a call to: 015782677224
+On: 2011-10-20 16:14:12.122499 Event: Call Connecting
+On: 2011-10-20 16:14:12.122547 Event: 200
+On: 2011-10-20 16:14:22.579701 Event: Terminate
+On: 2011-10-20 16:14:22.579741 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 16:14:27.361145 ------------------
+On: 2011-10-20 16:14:27.381452 Event: try to Connect to Controller
+On: 2011-10-20 16:14:28.662828 Event: init state
+On: 2011-10-20 16:14:28.663084 Event: Register Account to SIP server
+On: 2011-10-20 16:14:28.663862 Event: 100
+On: 2011-10-20 16:14:28.665929 Event: Caller Handler Ready
+On: 2011-10-20 16:14:33.676822 Event: CALL START
+On: 2011-10-20 16:14:33.676881 Event: Make a call to: 017678038038
+On: 2011-10-20 16:14:35.934621 Event: Call Connecting
+On: 2011-10-20 16:14:35.934670 Event: 200
+On: 2011-10-20 16:14:45.671012 Event: Terminate
+On: 2011-10-20 16:14:45.671053 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 16:14:50.456345 ------------------
+On: 2011-10-20 16:14:50.477011 Event: try to Connect to Controller
+On: 2011-10-20 16:14:51.754772 Event: init state
+On: 2011-10-20 16:14:51.755011 Event: Register Account to SIP server
+On: 2011-10-20 16:14:51.755435 Event: 100
+On: 2011-10-20 16:14:51.755522 Event: Caller Handler Ready
+On: 2011-10-20 16:14:56.761732 Event: CALL START
+On: 2011-10-20 16:14:56.761785 Event: Make a call to: 015252423662
+On: 2011-10-20 16:14:58.984650 Event: Call Connecting
+On: 2011-10-20 16:14:58.984698 Event: 200
+On: 2011-10-20 16:15:08.761602 Event: Terminate
+On: 2011-10-20 16:15:08.761645 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 16:15:13.571195 ------------------
+On: 2011-10-20 16:15:13.592297 Event: try to Connect to Controller
+On: 2011-10-20 16:15:14.846731 Event: init state
+On: 2011-10-20 16:15:14.847013 Event: Register Account to SIP server
+On: 2011-10-20 16:15:14.847440 Event: 100
+On: 2011-10-20 16:15:14.847526 Event: Caller Handler Ready
+On: 2011-10-20 16:15:19.857916 Event: CALL START
+On: 2011-10-20 16:15:19.857986 Event: Make a call to: 015128040906
+On: 2011-10-20 16:15:21.854640 Event: Call Connecting
+On: 2011-10-20 16:15:21.854688 Event: 200
+On: 2011-10-20 16:15:31.856230 Event: Terminate
+On: 2011-10-20 16:15:31.856271 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 16:18:04.170740 ------------------
+On: 2011-10-20 16:18:04.190941 Event: try to Connect to Controller
+On: 2011-10-20 16:18:05.474149 Event: init state
+On: 2011-10-20 16:18:05.474433 Event: Register Account to SIP server
+On: 2011-10-20 16:18:05.474856 Event: 100
+On: 2011-10-20 16:18:05.474941 Event: Caller Handler Ready
+On: 2011-10-20 16:18:10.481788 Event: CALL START
+On: 2011-10-20 16:18:10.481863 Event: Make a call to: 017678038038
+On: 2011-10-20 16:18:12.855860 Event: Call Connecting
+On: 2011-10-20 16:18:12.855910 Event: 200
+On: 2011-10-20 16:18:22.479744 Event: Terminate
+On: 2011-10-20 16:18:22.479785 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 16:18:27.237944 ------------------
+On: 2011-10-20 16:18:27.258953 Event: try to Connect to Controller
+On: 2011-10-20 16:18:28.577348 Event: init state
+On: 2011-10-20 16:18:28.577587 Event: Register Account to SIP server
+On: 2011-10-20 16:18:28.578066 Event: 100
+On: 2011-10-20 16:18:28.578156 Event: Caller Handler Ready
+On: 2011-10-20 16:18:33.585740 Event: CALL START
+On: 2011-10-20 16:18:33.585801 Event: Make a call to: 015128040906
+On: 2011-10-20 16:18:35.864484 Event: Call Connecting
+On: 2011-10-20 16:18:35.864533 Event: 200
+On: 2011-10-20 16:18:45.584108 Event: Terminate
+On: 2011-10-20 16:18:45.584150 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 16:18:50.451252 ------------------
+On: 2011-10-20 16:18:50.472088 Event: try to Connect to Controller
+On: 2011-10-20 16:18:51.692439 Event: init state
+On: 2011-10-20 16:18:51.692676 Event: Register Account to SIP server
+On: 2011-10-20 16:18:51.693100 Event: 100
+On: 2011-10-20 16:18:51.693185 Event: Caller Handler Ready
+On: 2011-10-20 16:18:56.701792 Event: CALL START
+On: 2011-10-20 16:18:56.701854 Event: Make a call to: 015252423662
+On: 2011-10-20 16:18:58.673252 Event: Call Connecting
+On: 2011-10-20 16:18:58.673301 Event: 200
+On: 2011-10-20 16:19:08.701468 Event: Terminate
+On: 2011-10-20 16:19:08.701509 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 16:19:13.446512 ------------------
+On: 2011-10-20 16:19:13.467044 Event: try to Connect to Controller
+On: 2011-10-20 16:19:14.778631 Event: init state
+On: 2011-10-20 16:19:14.778870 Event: Register Account to SIP server
+On: 2011-10-20 16:19:14.779666 Event: 100
+On: 2011-10-20 16:19:14.779754 Event: Caller Handler Ready
+On: 2011-10-20 16:19:24.801915 Event: CALL START
+On: 2011-10-20 16:19:24.801977 Event: Make a call to: 07612034661447
+On: 2011-10-20 16:19:27.452299 Event: Call Connecting
+On: 2011-10-20 16:19:27.452350 Event: 200
+On: 2011-10-20 16:19:27.654152 Event: Terminate
+On: 2011-10-20 16:19:27.654197 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 16:44:24.896132 ------------------
+On: 2011-10-20 16:44:24.916313 Event: try to Connect to Controller
+On: 2011-10-20 16:44:26.218749 Event: init state
+On: 2011-10-20 16:44:26.218986 Event: Register Account to SIP server
+On: 2011-10-20 16:44:26.219399 Event: 100
+On: 2011-10-20 16:44:26.219485 Event: Caller Handler Ready
+On: 2011-10-20 16:44:31.228775 Event: CALL START
+On: 2011-10-20 16:44:31.228828 Event: Make a call to: 015782677224
+On: 2011-10-20 16:44:33.726132 Event: Call Connecting
+On: 2011-10-20 16:44:33.726180 Event: 200
+On: 2011-10-20 16:44:43.226159 Event: Terminate
+On: 2011-10-20 16:44:43.226202 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 16:44:48.117372 ------------------
+On: 2011-10-20 16:44:48.153670 Event: try to Connect to Controller
+On: 2011-10-20 16:44:49.324993 Event: init state
+On: 2011-10-20 16:44:49.325229 Event: Register Account to SIP server
+On: 2011-10-20 16:44:49.325652 Event: 100
+On: 2011-10-20 16:44:49.325797 Event: Caller Handler Ready
+On: 2011-10-20 16:44:54.333755 Event: CALL START
+On: 2011-10-20 16:44:54.333813 Event: Make a call to: 017678038038
+On: 2011-10-20 16:44:56.303675 Event: Call Connecting
+On: 2011-10-20 16:44:56.303724 Event: 200
+On: 2011-10-20 16:45:06.331691 Event: Terminate
+On: 2011-10-20 16:45:06.331734 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 16:45:11.155460 ------------------
+On: 2011-10-20 16:45:11.175701 Event: try to Connect to Controller
+On: 2011-10-20 16:45:12.416088 Event: init state
+On: 2011-10-20 16:45:12.416327 Event: Register Account to SIP server
+On: 2011-10-20 16:45:12.417110 Event: 100
+On: 2011-10-20 16:45:12.417200 Event: Caller Handler Ready
+On: 2011-10-20 16:45:17.425739 Event: CALL START
+On: 2011-10-20 16:45:17.425790 Event: Make a call to: 015128040906
+On: 2011-10-20 16:45:19.686332 Event: Call Connecting
+On: 2011-10-20 16:45:19.686381 Event: 200
+On: 2011-10-20 16:45:29.424002 Event: Terminate
+On: 2011-10-20 16:45:29.424046 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 16:45:34.181179 ------------------
+On: 2011-10-20 16:45:34.202262 Event: try to Connect to Controller
+On: 2011-10-20 16:45:35.493488 Event: init state
+On: 2011-10-20 16:45:35.493770 Event: Register Account to SIP server
+On: 2011-10-20 16:45:35.494199 Event: 100
+On: 2011-10-20 16:45:35.494285 Event: Caller Handler Ready
+On: 2011-10-20 16:45:45.515815 Event: CALL START
+On: 2011-10-20 16:45:45.515881 Event: Make a call to: 07612034661447
+On: 2011-10-20 16:45:48.081900 Event: Call Connecting
+On: 2011-10-20 16:45:48.081952 Event: 200
+On: 2011-10-20 16:45:48.280246 Event: Terminate
+On: 2011-10-20 16:45:48.280290 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 16:48:26.286830 ------------------
+On: 2011-10-20 16:48:26.308101 Event: try to Connect to Controller
+On: 2011-10-20 16:48:27.615576 Event: init state
+On: 2011-10-20 16:48:27.615811 Event: Register Account to SIP server
+On: 2011-10-20 16:48:27.616589 Event: 100
+On: 2011-10-20 16:48:27.616676 Event: Caller Handler Ready
+On: 2011-10-20 16:48:32.625739 Event: CALL START
+On: 2011-10-20 16:48:32.625798 Event: Make a call to: 015782677224
+On: 2011-10-20 16:48:34.605225 Event: Call Connecting
+On: 2011-10-20 16:48:34.605274 Event: 200
+On: 2011-10-20 16:48:44.623314 Event: Terminate
+On: 2011-10-20 16:48:44.623357 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 16:48:49.391920 ------------------
+On: 2011-10-20 16:48:49.412736 Event: try to Connect to Controller
+On: 2011-10-20 16:48:50.707583 Event: init state
+On: 2011-10-20 16:48:50.707815 Event: Register Account to SIP server
+On: 2011-10-20 16:48:50.708227 Event: 100
+On: 2011-10-20 16:48:50.708312 Event: Caller Handler Ready
+On: 2011-10-20 16:48:55.715267 Event: CALL START
+On: 2011-10-20 16:48:55.715327 Event: Make a call to: 017678038038
+On: 2011-10-20 16:48:57.558885 Event: Call Connecting
+On: 2011-10-20 16:48:57.558934 Event: 200
+On: 2011-10-20 16:49:07.714594 Event: Terminate
+On: 2011-10-20 16:49:07.714637 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 16:49:12.478288 ------------------
+On: 2011-10-20 16:49:12.499396 Event: try to Connect to Controller
+On: 2011-10-20 16:49:13.799010 Event: init state
+On: 2011-10-20 16:49:13.799277 Event: Register Account to SIP server
+On: 2011-10-20 16:49:13.800057 Event: 100
+On: 2011-10-20 16:49:13.800143 Event: Caller Handler Ready
+On: 2011-10-20 16:49:18.809483 Event: CALL START
+On: 2011-10-20 16:49:18.809539 Event: Make a call to: 015128040906
+On: 2011-10-20 16:49:20.796480 Event: Call Connecting
+On: 2011-10-20 16:49:20.796528 Event: 200
+On: 2011-10-20 16:49:30.806845 Event: Terminate
+On: 2011-10-20 16:49:30.806886 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 16:49:37.551202 ------------------
+On: 2011-10-20 16:49:37.571521 Event: try to Connect to Controller
+On: 2011-10-20 16:49:38.878331 Event: init state
+On: 2011-10-20 16:49:38.878569 Event: Register Account to SIP server
+On: 2011-10-20 16:49:38.878989 Event: 100
+On: 2011-10-20 16:49:38.879075 Event: Caller Handler Ready
+On: 2011-10-20 16:49:43.885990 Event: CALL START
+On: 2011-10-20 16:49:43.886045 Event: Make a call to: 015252423662
+On: 2011-10-20 16:49:46.122498 Event: Call Connecting
+On: 2011-10-20 16:49:46.122546 Event: 200
+On: 2011-10-20 16:49:55.883680 Event: Terminate
+On: 2011-10-20 16:49:55.883721 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 16:50:00.659026 ------------------
+On: 2011-10-20 16:50:00.679672 Event: try to Connect to Controller
+On: 2011-10-20 16:50:01.957000 Event: init state
+On: 2011-10-20 16:50:01.957236 Event: Register Account to SIP server
+On: 2011-10-20 16:50:01.958073 Event: 100
+On: 2011-10-20 16:50:01.958162 Event: Caller Handler Ready
+On: 2011-10-20 16:50:11.979159 Event: CALL START
+On: 2011-10-20 16:50:11.979221 Event: Make a call to: 07612034661447
+On: 2011-10-20 16:50:14.093617 Event: Call Connecting
+On: 2011-10-20 16:50:14.093668 Event: 200
+On: 2011-10-20 16:50:14.276618 Event: Terminate
+On: 2011-10-20 16:50:14.276662 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 16:52:29.950598 ------------------
+On: 2011-10-20 16:52:29.971995 Event: try to Connect to Controller
+On: 2011-10-20 16:52:31.279157 Event: init state
+On: 2011-10-20 16:52:31.279388 Event: Register Account to SIP server
+On: 2011-10-20 16:52:31.279804 Event: 100
+On: 2011-10-20 16:52:31.279889 Event: Caller Handler Ready
+On: 2011-10-20 16:52:36.289163 Event: CALL START
+On: 2011-10-20 16:52:36.289222 Event: Make a call to: 015782677224
+On: 2011-10-20 16:52:38.829071 Event: Call Connecting
+On: 2011-10-20 16:52:38.829118 Event: 200
+On: 2011-10-20 16:52:48.286534 Event: Terminate
+On: 2011-10-20 16:52:48.286574 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 16:52:53.069610 ------------------
+On: 2011-10-20 16:52:53.090090 Event: try to Connect to Controller
+On: 2011-10-20 16:52:54.373028 Event: init state
+On: 2011-10-20 16:52:54.373267 Event: Register Account to SIP server
+On: 2011-10-20 16:52:54.373689 Event: 100
+On: 2011-10-20 16:52:54.373823 Event: Caller Handler Ready
+On: 2011-10-20 16:52:59.381743 Event: CALL START
+On: 2011-10-20 16:52:59.381803 Event: Make a call to: 017678038038
+On: 2011-10-20 16:53:01.383989 Event: Call Connecting
+On: 2011-10-20 16:53:01.384040 Event: 200
+On: 2011-10-20 16:53:11.379688 Event: Terminate
+On: 2011-10-20 16:53:11.379730 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 16:53:39.284280 ------------------
+On: 2011-10-20 16:53:39.304553 Event: try to Connect to Controller
+On: 2011-10-20 16:53:40.583797 Event: init state
+On: 2011-10-20 16:53:40.584038 Event: Register Account to SIP server
+On: 2011-10-20 16:53:40.584457 Event: 100
+On: 2011-10-20 16:53:40.584542 Event: Caller Handler Ready
+On: 2011-10-20 16:53:45.593739 Event: CALL START
+On: 2011-10-20 16:53:45.593800 Event: Make a call to: 015128040906
+On: 2011-10-20 16:53:47.652059 Event: Call Connecting
+On: 2011-10-20 16:53:47.652108 Event: 200
+On: 2011-10-20 16:53:57.591570 Event: Terminate
+On: 2011-10-20 16:53:57.591611 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 16:55:33.654764 ------------------
+On: 2011-10-20 16:55:33.675994 Event: try to Connect to Controller
+On: 2011-10-20 16:55:34.962206 Event: init state
+On: 2011-10-20 16:55:34.962443 Event: Register Account to SIP server
+On: 2011-10-20 16:55:34.962860 Event: 100
+On: 2011-10-20 16:55:34.962945 Event: Caller Handler Ready
+On: 2011-10-20 16:55:39.969744 Event: CALL START
+On: 2011-10-20 16:55:39.969804 Event: Make a call to: 017678038038
+On: 2011-10-20 16:55:42.023388 Event: Call Connecting
+On: 2011-10-20 16:55:42.023436 Event: 200
+On: 2011-10-20 16:55:51.969900 Event: Terminate
+On: 2011-10-20 16:55:51.969944 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 16:55:56.827942 ------------------
+On: 2011-10-20 16:55:56.849017 Event: try to Connect to Controller
+On: 2011-10-20 16:55:58.056882 Event: init state
+On: 2011-10-20 16:55:58.057128 Event: Register Account to SIP server
+On: 2011-10-20 16:55:58.057550 Event: 100
+On: 2011-10-20 16:55:58.057634 Event: Caller Handler Ready
+On: 2011-10-20 16:56:03.065745 Event: CALL START
+On: 2011-10-20 16:56:03.065803 Event: Make a call to: 015128040906
+On: 2011-10-20 16:56:05.557683 Event: Call Connecting
+On: 2011-10-20 16:56:05.557767 Event: 200
+On: 2011-10-20 16:56:15.063814 Event: Terminate
+On: 2011-10-20 16:56:15.063856 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 16:56:19.933229 ------------------
+On: 2011-10-20 16:56:19.954732 Event: try to Connect to Controller
+On: 2011-10-20 16:56:21.147586 Event: init state
+On: 2011-10-20 16:56:21.147838 Event: Register Account to SIP server
+On: 2011-10-20 16:56:21.148261 Event: 100
+On: 2011-10-20 16:56:21.148346 Event: Caller Handler Ready
+On: 2011-10-20 16:56:26.157723 Event: CALL START
+On: 2011-10-20 16:56:26.157779 Event: Make a call to: 015252423662
+On: 2011-10-20 16:56:28.146828 Event: Call Connecting
+On: 2011-10-20 16:56:28.146876 Event: 200
+On: 2011-10-20 16:56:38.155051 Event: Terminate
+On: 2011-10-20 16:56:38.155092 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 16:56:42.965307 ------------------
+On: 2011-10-20 16:56:42.985996 Event: try to Connect to Controller
+On: 2011-10-20 16:56:44.239644 Event: init state
+On: 2011-10-20 16:56:44.239886 Event: Register Account to SIP server
+On: 2011-10-20 16:56:44.240323 Event: 100
+On: 2011-10-20 16:56:44.240408 Event: Caller Handler Ready
+On: 2011-10-20 16:56:49.249741 Event: CALL START
+On: 2011-10-20 16:56:49.249800 Event: Make a call to: 015782677224
+On: 2011-10-20 16:56:51.025616 Event: Call Connecting
+On: 2011-10-20 16:56:51.025667 Event: 200
+On: 2011-10-20 16:57:01.247135 Event: Terminate
+On: 2011-10-20 16:57:01.247176 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 17:39:13.876817 ------------------
+On: 2011-10-20 17:39:13.947842 Event: try to Connect to Controller
+On: 2011-10-20 17:39:14.003478 Event: init state
+On: 2011-10-20 17:39:14.003723 Event: Register Account to SIP server
+On: 2011-10-20 17:39:14.004144 Event: 100
+On: 2011-10-20 17:39:14.004229 Event: Caller Handler Ready
+On: 2011-10-20 17:39:16.009535 Event: Terminate
+On: 2011-10-20 17:39:16.009573 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 17:39:27.817358 ------------------
+On: 2011-10-20 17:39:27.903468 Event: try to Connect to Controller
+On: 2011-10-20 17:39:28.330629 Event: init state
+On: 2011-10-20 17:39:28.330873 Event: Register Account to SIP server
+On: 2011-10-20 17:39:28.331645 Event: 100
+On: 2011-10-20 17:39:28.331729 Event: Caller Handler Ready
+On: 2011-10-20 17:39:30.336924 Event: Terminate
+On: 2011-10-20 17:39:30.336960 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 17:39:36.389530 ------------------
+On: 2011-10-20 17:39:36.469318 Event: try to Connect to Controller
+On: 2011-10-20 17:39:36.516912 Event: init state
+On: 2011-10-20 17:39:36.517168 Event: Register Account to SIP server
+On: 2011-10-20 17:39:36.517594 Event: 100
+On: 2011-10-20 17:39:36.517679 Event: Caller Handler Ready
+On: 2011-10-20 17:39:38.522657 Event: Terminate
+On: 2011-10-20 17:39:38.522693 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 17:39:44.548399 ------------------
+On: 2011-10-20 17:39:44.617170 Event: try to Connect to Controller
+On: 2011-10-20 17:39:44.695112 Event: init state
+On: 2011-10-20 17:39:44.695352 Event: Register Account to SIP server
+On: 2011-10-20 17:39:44.695782 Event: 100
+On: 2011-10-20 17:39:44.695869 Event: Caller Handler Ready
+On: 2011-10-20 17:39:46.701044 Event: Terminate
+On: 2011-10-20 17:39:46.701079 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 17:39:52.614011 ------------------
+On: 2011-10-20 17:39:52.676553 Event: try to Connect to Controller
+On: 2011-10-20 17:39:52.864856 Event: init state
+On: 2011-10-20 17:39:52.865100 Event: Register Account to SIP server
+On: 2011-10-20 17:39:52.865962 Event: 100
+On: 2011-10-20 17:39:52.866051 Event: Caller Handler Ready
+On: 2011-10-20 17:39:54.870795 Event: Terminate
+On: 2011-10-20 17:39:54.870833 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 17:40:00.712709 ------------------
+On: 2011-10-20 17:40:00.785054 Event: try to Connect to Controller
+On: 2011-10-20 17:40:01.030130 Event: init state
+On: 2011-10-20 17:40:01.030482 Event: Register Account to SIP server
+On: 2011-10-20 17:40:01.030910 Event: 100
+On: 2011-10-20 17:40:01.030999 Event: Caller Handler Ready
+On: 2011-10-20 17:40:03.034650 Event: Terminate
+On: 2011-10-20 17:40:03.034686 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 17:40:09.023298 ------------------
+On: 2011-10-20 17:40:09.085334 Event: try to Connect to Controller
+On: 2011-10-20 17:40:09.201944 Event: init state
+On: 2011-10-20 17:40:09.202259 Event: Register Account to SIP server
+On: 2011-10-20 17:40:09.202682 Event: 100
+On: 2011-10-20 17:40:09.202766 Event: Caller Handler Ready
+On: 2011-10-20 17:40:11.207248 Event: Terminate
+On: 2011-10-20 17:40:11.207283 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 17:42:03.094351 ------------------
+On: 2011-10-20 17:42:03.171086 Event: try to Connect to Controller
+On: 2011-10-20 17:42:03.274570 Event: init state
+On: 2011-10-20 17:42:03.274818 Event: Register Account to SIP server
+On: 2011-10-20 17:42:03.275604 Event: 100
+On: 2011-10-20 17:42:03.275688 Event: Caller Handler Ready
+On: 2011-10-20 17:42:05.284879 Event: Terminate
+On: 2011-10-20 17:42:05.284920 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 17:58:36.529274 ------------------
+On: 2011-10-20 17:58:36.554214 Event: try to Connect to Controller
+On: 2011-10-20 17:58:37.735520 Event: init state
+On: 2011-10-20 17:58:37.735752 Event: Register Account to SIP server
+On: 2011-10-20 17:58:37.736174 Event: 100
+On: 2011-10-20 17:58:37.736259 Event: Receiver Handler Ready
+On: 2011-10-20 17:58:37.736527 Event: RECEIVE START
+On: 2011-10-20 17:58:39.736451 Event: {Call "447" <sip:447@132.230.4.8>}
+On: 2011-10-20 17:58:39.737113 Event: Call Connecting
+On: 2011-10-20 17:58:39.737161 Event: 200
+On: 2011-10-20 17:58:39.737405 Event: Answer call
+On: 2011-10-20 17:58:39.737457 Event: Hangup call
+On: 2011-10-20 17:58:39.737638 Event: CALL OK
+On: 2011-10-20 17:58:39.788380 Event: Call Disconnected
+On: 2011-10-20 17:58:41.302290 Event: Terminate
+On: 2011-10-20 17:58:41.302336 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 17:58:53.123358 ------------------
+On: 2011-10-20 17:58:53.148363 Event: try to Connect to Controller
+On: 2011-10-20 17:58:54.369619 Event: init state
+On: 2011-10-20 17:58:54.369907 Event: Register Account to SIP server
+On: 2011-10-20 17:58:54.370695 Event: 100
+On: 2011-10-20 17:58:54.370784 Event: Receiver Handler Ready
+On: 2011-10-20 17:58:54.371201 Event: RECEIVE START
+On: 2011-10-20 17:58:56.434322 Event: {Call "447" <sip:447@132.230.4.8>}
+On: 2011-10-20 17:58:56.434816 Event: Call Connecting
+On: 2011-10-20 17:58:56.434857 Event: 200
+On: 2011-10-20 17:58:56.435111 Event: Answer call
+On: 2011-10-20 17:58:56.435165 Event: Hangup call
+On: 2011-10-20 17:58:56.435344 Event: CALL OK
+On: 2011-10-20 17:58:56.486076 Event: Call Disconnected
+On: 2011-10-20 17:58:57.811065 Event: Terminate
+On: 2011-10-20 17:58:57.811109 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 18:03:10.407462 ------------------
+On: 2011-10-20 18:03:10.428347 Event: try to Connect to Controller
+On: 2011-10-20 18:03:11.660663 Event: init state
+On: 2011-10-20 18:03:11.660947 Event: Register Account to SIP server
+On: 2011-10-20 18:03:11.661369 Event: 100
+On: 2011-10-20 18:03:11.661456 Event: Receiver Handler Ready
+On: 2011-10-20 18:03:11.661771 Event: RECEIVE START
+On: 2011-10-20 18:03:13.708075 Event: {Call "447" <sip:447@132.230.4.8>}
+On: 2011-10-20 18:03:13.708651 Event: Call Connecting
+On: 2011-10-20 18:03:13.708696 Event: 200
+On: 2011-10-20 18:03:13.708947 Event: Answer call
+On: 2011-10-20 18:03:13.709001 Event: Hangup call
+On: 2011-10-20 18:03:13.709181 Event: CALL OK
+On: 2011-10-20 18:03:13.759873 Event: Call Disconnected
+On: 2011-10-20 18:03:15.064398 Event: Terminate
+On: 2011-10-20 18:03:15.064446 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 18:06:15.316786 ------------------
+On: 2011-10-20 18:06:15.337278 Event: try to Connect to Controller
+On: 2011-10-20 18:06:16.608933 Event: init state
+On: 2011-10-20 18:06:16.609192 Event: Register Account to SIP server
+On: 2011-10-20 18:06:16.609625 Event: 100
+On: 2011-10-20 18:06:16.610864 Event: Caller Handler Ready
+On: 2011-10-20 18:06:18.614826 Event: Terminate
+On: 2011-10-20 18:06:18.614868 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 18:07:06.481364 ------------------
+On: 2011-10-20 18:07:06.502187 Event: try to Connect to Controller
+On: 2011-10-20 18:07:07.794125 Event: init state
+On: 2011-10-20 18:07:07.794377 Event: Register Account to SIP server
+On: 2011-10-20 18:07:07.795157 Event: 100
+On: 2011-10-20 18:07:07.795243 Event: Receiver Handler Ready
+On: 2011-10-20 18:07:07.795669 Event: RECEIVE START
+On: 2011-10-20 18:07:09.777688 Event: {Call "447" <sip:447@132.230.4.8>}
+On: 2011-10-20 18:07:09.778439 Event: Call Connecting
+On: 2011-10-20 18:07:09.778484 Event: 200
+On: 2011-10-20 18:07:09.778734 Event: Answer call
+On: 2011-10-20 18:07:09.778788 Event: Hangup call
+On: 2011-10-20 18:07:09.778987 Event: CALL OK
+On: 2011-10-20 18:07:09.829748 Event: Call Disconnected
+On: 2011-10-20 18:07:11.239449 Event: Terminate
+On: 2011-10-20 18:07:11.239510 Event: Goodbye
diff --git a/For Weekly Test/tricode/SIPHandler.py b/For Weekly Test/tricode/SIPHandler.py
new file mode 100755
index 0000000..4a6b435
--- /dev/null
+++ b/For Weekly Test/tricode/SIPHandler.py
@@ -0,0 +1,252 @@
+import sys
+import string
+import pjsua as pj
+import ServerClass
+import LogFileClass
+import setproctitle
+from time import sleep
+
+def log_cb(level, str, len):
+
+ print ""
+
+# Receive events from incoming Call
+class Account(pj.AccountCallback):
+
+ def on_incoming_call(self, call):
+ global current_call
+
+ print 'Incoming Call'
+ current_call = call
+ call_cb = Calling(current_call)
+ current_call.set_callback(call_cb)
+
+ logger.logEvent(current_call)
+
+ call.answer(200)
+ logger.logEvent("Answer call")
+ print 'Answer Call'
+ if current_call <> None:
+ logger.logEvent("Hangup call")
+ print 'Hangup Call'
+ call.hangup()
+
+ logger.logEvent('CALL OK')
+
+class Calling(pj.CallCallback):
+
+ def __init__(self, call=None):
+ pj.CallCallback.__init__(self, call)
+
+ def on_state(self):
+ global current_call
+
+ if self.call.info().state <> pj.CallState.DISCONNECTED:
+ if self.call.info().state_text == "CONNECTING":
+ print 'Call Connecting'
+ logger.logEvent("Call Connecting")
+ logger.logEvent('200')
+ server.sendData('CALL OK')
+
+ if self.call.info().last_reason == "Busy Here":
+ print 'Number busy or offline'
+ logger.logEvent('Number busy or Offline')
+ server.sendData('CALL NOT OK')
+ logger.logEvent('CALL NOT OK')
+
+ if self.call.info().state == pj.CallState.DISCONNECTED:
+ logger.logEvent('Call Disconnected')
+ print 'Call Discont'
+ current_call = None
+
+
+def make_call(uri):
+
+ try:
+
+ cb=Calling()
+ return acc.make_call(uri, cb)
+
+ except pj.Error, e:
+ print "408 " + str(e)
+ logger.logEvent('408')
+ return None
+
+def greeting():
+ global server
+ global status
+ global port
+
+ port = sys.argv[2]
+ server = None
+ status = None
+
+ server = ServerClass.ServerHandler(port)
+ logger.logEvent('try to Connect to Controller')
+ conn = server.openSocket()
+
+ if server.connected == 1:
+ if server.receiveData(30) == 'HELLO HANDLER':
+ print 'GREETING'
+ server.sendData('HELLO CONTROLLER')
+ status = 'OK'
+ else:
+ status = 'NOT OK'
+ logger.logEvent('Cant connect to Controller')
+ sys.exit(1)
+
+def initLogFile(sipServer):
+
+ global logger
+
+ if sipServer == '132.230.4.8':
+ nameOfLogFile = 'SIP handler.log'
+ print '--SIP Asterisk--'
+
+ elif sipServer == 'sipgate.de':
+ nameOfLogFile = 'Landline handler.log'
+ print '--Landline--'
+
+ elif sipServer == '132.230.252.228':
+ nameOfLogFile = 'University SIP handler.log'
+ print '--university tephone network--'
+
+ logger = LogFileClass.Logging(nameOfLogFile)
+
+def initState():
+ global message
+ global state
+ global num
+
+ logger.logEvent('init state')
+ message = server.receiveData(30)
+
+ if message == 'RECEIVER':
+ state = 'RECEIVER'
+
+
+ elif message[0:6] == 'CALLER':
+ state = 'CALLER'
+ no = message[7:]
+ if sipServer == '132.230.252.228':
+ num = no[7:]
+ else:
+ num = no
+ print 'INIT STATE', state
+
+def initHandler():
+ global sipServer
+ global username
+ global password
+
+
+ accConf = sys.argv[1]
+ username = accConf[0:accConf.find(':')]
+
+ line = accConf[accConf.find(':')+1:]
+ password = line[0:line.find(':')]
+
+ newLine = line[line.find(':')+1:]
+ sipServer = newLine[0:newLine.find(':')]
+
+
+lib = pj.Lib()
+stop = False
+
+print 'INIT SYSTEM'
+
+initHandler()
+setproctitle.setproctitle('SIP Handler')
+initLogFile(sipServer)
+
+logger.logEvent('')
+
+while stop <> True:
+
+ acc_cfg = None
+
+ lib.init(log_cfg = pj.LogConfig(level=1, callback=log_cb))
+ transport = lib.create_transport(pj.TransportType.UDP, pj.TransportConfig(0))
+
+ lib.start()
+ lib.set_null_snd_dev()
+
+ greeting()
+
+
+ try:
+ initState()
+ acc_cfg = pj.AccountConfig(str(sipServer),str(username),str(password))
+ logger.logEvent('Register Account to SIP server')
+ acc = lib.create_account(acc_cfg, cb=Account())
+
+ if acc.info().reg_status < 700:
+
+ if state =='RECEIVER':
+ logger.logEvent(acc.info().reg_status)
+ server.sendData('RECEIVER READY')
+ logger.logEvent('Receiver Handler Ready')
+
+ while 1:
+
+ data = server.receiveData(1)
+
+ if data == 'RECEIVE START':
+ print data
+ logger.logEvent(data)
+
+ if data == 'TERMINATE CONNECTION':
+ print data
+ logger.logEvent('Terminate')
+ stop = True
+ break
+
+ elif state =='CALLER':
+ logger.logEvent(acc.info().reg_status)
+ server.sendData('CALLER READY')
+ logger.logEvent('Caller Handler Ready')
+
+ while 1:
+
+ data = server.receiveData(1)
+
+ if data == 'CALL START':
+ print data
+ if num <> '':
+ sleep(3)
+ logger.logEvent(data)
+ logger.logEvent('Make a call to: ' + num)
+ number = "sip:"+num+"@"+sipServer
+ print number
+ make_call(number)
+ else:
+ logger.logEvent('No number to call')
+ logger.logEvent('CALL NOT OK')
+
+ if data == 'TERMINATE CONNECTION':
+ print data
+ stop = True
+ logger.logEvent('Terminate')
+ break
+
+ else:
+ logger.logEvent('Unknow Message')
+ server.sendData('Unknow Message')
+ server.closeConnection()
+ sys.exit(0.5)
+
+ else:
+ logger.logEvent("488 Not Acceptable Here")
+ lib.destroy()
+
+ except ValueError:
+ print "401 Unauthorized " + str(e)
+ logger.logEvent("401 Unauthorized ")
+
+logger.logEvent("Goodbye")
+acc.delete()
+lib.destroy()
+server.closeConnection()
+lib = None
+acc = None
+
diff --git a/For Weekly Test/tricode/SSHTunnelBoxClass.py b/For Weekly Test/tricode/SSHTunnelBoxClass.py
new file mode 100755
index 0000000..0447365
--- /dev/null
+++ b/For Weekly Test/tricode/SSHTunnelBoxClass.py
@@ -0,0 +1,45 @@
+#Here is a tutorial how to generate and copy your RSA SSH public key :)
+#>>> http://www.thegeekstuff.com/2008/11/3-steps-to-perform-ssh-login-without-password-using-ssh-keygen-ssh-copy-id/
+import subprocess
+from time import sleep
+
+class SSHTunneling:
+
+ def __init__(self, localPort, remotePort, remoteServer, username, password):
+ self.lPort = localPort
+ self.rPort = remotePort
+ self.rServer = remoteServer
+
+ self.usern = username
+ self.passw = password
+
+ self.__tunnelStarted = 0
+ self.__sshTunnel = 1
+
+ def startTunneling(self):
+ if self.__tunnelStarted == 0:
+ command = str(self.lPort) + ':' + self.rServer + ':' + str(self.rPort)
+ uad = self.usern + '@' + self.rServer
+
+ try:
+ self.__sshTunnel = subprocess.Popen(['ssh','-p','7884','-N', '-L', command, uad], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
+ #self.__sshTunnel = subprocess.Popen(['ssh','-N', '-L', command, uad], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
+ sleep(2)
+ self.__tunnelStarted = 1
+ return 1
+ except Exception, e:
+ print str(e)
+ return 0
+
+ def killTunneling(self):
+ if self.__tunnelStarted == 1:
+ try:
+ self.__sshTunnel.kill()
+ self.__tunnelStarted = 0
+ return 1
+
+ except Exception, e:
+ print str(e)
+ return 0
+
+
diff --git a/For Weekly Test/tricode/SSHTunnelBoxClass.pyc b/For Weekly Test/tricode/SSHTunnelBoxClass.pyc
new file mode 100644
index 0000000..aed81f4
--- /dev/null
+++ b/For Weekly Test/tricode/SSHTunnelBoxClass.pyc
Binary files differ
diff --git a/For Weekly Test/tricode/SSHTunnelClass.py b/For Weekly Test/tricode/SSHTunnelClass.py
new file mode 100755
index 0000000..12bedeb
--- /dev/null
+++ b/For Weekly Test/tricode/SSHTunnelClass.py
@@ -0,0 +1,47 @@
+#Here is a tutorial how to generate and copy your RSA SSH public key :)
+#>>> http://www.thegeekstuff.com/2008/11/3-steps-to-perform-ssh-login-without-password-using-ssh-keygen-ssh-copy-id/
+import subprocess
+
+class SSHTunneling:
+
+ def __init__(self, localPort, remotePort, remoteServer, username, password):
+ self.lPort = localPort
+ self.rPort = remotePort
+ self.rServer = remoteServer
+
+ self.usern = username
+ self.passw = password
+
+ self.__tunnelStarted = 0
+ self.__sshTunnel = 1
+
+ def startTunneling(self):
+ if self.__tunnelStarted == 0:
+ command = str(self.lPort) + ':' + self.rServer + ':' + str(self.rPort)
+ uad = self.usern + '@' + self.rServer
+
+ try:
+ self.__sshTunnel = subprocess.Popen(['ssh','-p','7884','-N', '-L', command, uad], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
+ self.__tunnelStarted = 1
+ return 1
+ except Exception, e:
+ print str(e)
+ return 0
+
+ def killTunneling(self):
+ if self.__tunnelStarted == 1:
+ try:
+ self.__sshTunnel.kill()
+ self.__tunnelStarted = 0
+ return 1
+
+ except Exception, e:
+ print str(e)
+ return 0
+
+x = SSHTunneling(50000, 50008, '10.4.58.241', 'lsfks', 'r')
+print x.startTunneling()
+print 'Tunnel started '
+sleep(50)
+print x.killTunneling()
+print 'kill tunnel'
diff --git a/For Weekly Test/tricode/ServerClass.py b/For Weekly Test/tricode/ServerClass.py
new file mode 100755
index 0000000..93c2f8e
--- /dev/null
+++ b/For Weekly Test/tricode/ServerClass.py
@@ -0,0 +1,152 @@
+import socket
+import sys
+import os
+import string
+import signal
+
+class TimeoutException(Exception):
+ pass
+
+class ServerHandler:
+
+ def __init__(self,p):
+ self.port = p
+ self.host = None #symbolic name meaning all available interfaces
+ self.s = None
+ self.connected = 0
+ self.address = "127.0.0.1" #address of the main controller
+ self.onceConnected = 0
+ self.error = 'No error'
+
+ self.debugMode = 0
+
+ def openSocket(self):
+ self.error = 'No error'
+ for res in socket.getaddrinfo(self.host, self.port, socket.AF_UNSPEC,
+ socket.SOCK_STREAM, 0, socket.AI_PASSIVE):
+ af, socktype, proto, canonname, sa = res
+
+ try:
+ self.s = socket.socket(af, socktype, proto)
+ self.s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) #this resolves the bug with live packets
+ except socket.error, msg:
+ self.s = None
+ self.connected = 0
+ self.error = str(msg)
+ continue
+
+ try:
+ self.s.bind(sa)
+ self.s.listen(1)
+ except socket.error, msg:
+ self.s.close()
+ self.s = None
+ self.connected = 0
+ self.error = str(msg)
+ continue
+ break
+
+ if self.s is None:
+ self.connected = 0
+ return 0
+ else: #accept the connection
+ self.connection, self.address = self.s.accept()
+ self.connected = 1
+ self.onceConnected = 1
+ return 1
+
+ def connectedTo(self):
+ return self.address
+
+ def receiveData(self, timeout):
+ if self.connected == 1:
+
+ def timeout_handler(signum, frame):
+ raise TimeoutException()
+
+ try:
+
+ old_handler = signal.signal(signal.SIGALRM, timeout_handler)
+ signal.alarm(timeout) #start the timeout alarm, for timeout seconds
+
+ data = self.connection.recv(1024)
+
+ #stop the timeout function
+ signal.signal(signal.SIGALRM, old_handler)
+ signal.alarm(0)
+
+ if not data:
+ self.connected = 0
+ return 'NO DATA'
+ else:
+ return data
+
+ except TimeoutException:
+ #timeout happened
+ signal.signal(signal.SIGALRM, old_handler)
+ signal.alarm(0)
+ return 'TIMEOUT'
+
+ except Exception, e:
+ #stop the timeout timer
+ signal.signal(signal.SIGALRM, old_handler)
+ signal.alarm(0)
+
+ if self.debugMode == 1:
+ import traceback
+ print traceback.format_exc()
+ print e
+ self.connected = 0
+ if error[0:11] == '[Errno 104]':
+ return 3 #the other side reset the connection,[Errno 104] Connection reset by peer
+
+ return 2
+ else:
+ return 0
+
+ def sendData(self, data):
+ if self.connected == 1:
+ try:
+ self.connection.send(data)
+ return 1
+
+ except Exception, e:
+ if self.debugMode == 1:
+ import traceback
+ print traceback.format_exc()
+ print e
+ self.connecected = 0
+ return 2
+ else:
+ return 0
+
+ def closeConnection(self):
+ if self.onceConnected == 1:
+ try:
+ self.connected = 0
+ SHUT_RDWR = 2
+ self.connection.shutdown(SHUT_RDWR)
+ self.connection.close()
+ return 1
+ except Exception, e:
+ self.connected = 0
+ error = str(e)
+ if self.debugMode == 1:
+ import traceback
+ print traceback.format_exc()
+ print e
+ if error[0:11] == '[Errno 107]':
+ return 3 #the other side closed the connection before us [Errno 107] Transport endpoint is not connected
+ return 2
+ else:
+ return 0
+
+ def killPort(self):
+ killResult = os.popen('lsof -i tcp:' + str(self.port) + ' | grep "python " | awk -F" " ' + "'{print $2}'").read()
+ killResult = killResult.replace('\n','')
+ print killResult
+ if killResult!='':
+ print killResult
+ killPort = os.popen("kill -9 " + killResult).read()
+ return 1
+ return 0
diff --git a/For Weekly Test/tricode/ServerClass.pyc b/For Weekly Test/tricode/ServerClass.pyc
new file mode 100644
index 0000000..f935ede
--- /dev/null
+++ b/For Weekly Test/tricode/ServerClass.pyc
Binary files differ
diff --git a/For Weekly Test/tricode/ServerClassSoftware.py b/For Weekly Test/tricode/ServerClassSoftware.py
new file mode 100755
index 0000000..206411e
--- /dev/null
+++ b/For Weekly Test/tricode/ServerClassSoftware.py
@@ -0,0 +1,162 @@
+import socket
+import sys
+import os
+import string
+import signal
+
+class TimeoutException(Exception):
+ pass
+
+class ServerHandlerSoftware:
+
+ def __init__(self,p):
+ self.port = p
+ self.host = None #symbolic name meaning all available interfaces
+ self.s = None
+ self.connected = 0
+ self.address = "127.0.0.1" #address of the main controller
+ self.onceConnected = 0
+ self.error = 'No error'
+
+ self.debugMode = 0
+
+ def openSocket(self, timeoutVar):
+ self.error = 'No error'
+ for res in socket.getaddrinfo(self.host, self.port, socket.AF_UNSPEC,
+ socket.SOCK_STREAM, 0, socket.AI_PASSIVE):
+ af, socktype, proto, canonname, sa = res
+
+
+ try:
+
+ self.s = socket.socket(af, socktype, proto)
+ self.s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) #this resolves the bug with live packets
+ self.s.settimeout(timeoutVar)
+
+ except socket.error, msg:
+ self.s = None
+ self.connected = 0
+ self.error = str(msg)
+ continue
+
+ try:
+ self.s.bind(sa)
+ self.s.listen(1)
+
+ except socket.error, msg:
+ self.s.close()
+ self.s = None
+ self.connected = 0
+ self.error = str(msg)
+ continue
+
+ break
+
+ if self.s is None:
+ self.connected = 0
+ return 0
+ else: #accept the connection
+ try:
+ self.connection, self.address = self.s.accept()
+ self.s.settimeout(0)
+ self.connected = 1
+ self.onceConnected = 1
+ return 1
+ except socket.timeout:
+ return 'TIMEOUT'
+
+ def connectedTo(self):
+ return self.address
+
+ def receiveData(self, timeout):
+ if self.connected == 1:
+
+ def timeout_handler(signum, frame):
+ raise TimeoutException()
+
+ try:
+
+ old_handler = signal.signal(signal.SIGALRM, timeout_handler)
+ signal.alarm(timeout) #start the timeout alarm, for timeout seconds
+
+ data = self.connection.recv(1024)
+
+ #stop the timeout function
+ signal.signal(signal.SIGALRM, old_handler)
+ signal.alarm(0)
+
+ if not data:
+ self.connected = 0
+ return 'NO DATA'
+ else:
+ return data
+
+ except TimeoutException:
+ #timeout happened
+ signal.signal(signal.SIGALRM, old_handler)
+ signal.alarm(0)
+ return 'TIMEOUT'
+
+ except Exception, e:
+ #stop the timeout timer
+ signal.signal(signal.SIGALRM, old_handler)
+ signal.alarm(0)
+
+ if self.debugMode == 1:
+ import traceback
+ print traceback.format_exc()
+ print e
+ self.connected = 0
+ if error[0:11] == '[Errno 104]':
+ return 3 #the other side reset the connection,[Errno 104] Connection reset by peer
+
+ return 2
+ else:
+ return 0
+
+ def sendData(self, data):
+ if self.connected == 1:
+ try:
+ self.connection.send(data)
+ return 1
+
+ except Exception, e:
+ if self.debugMode == 1:
+ import traceback
+ print traceback.format_exc()
+ print e
+ self.connecected = 0
+ return 2
+ else:
+ return 0
+
+ def closeConnection(self):
+ if self.onceConnected == 1:
+ try:
+ self.connected = 0
+ SHUT_RDWR = 2
+ self.connection.shutdown(SHUT_RDWR)
+ self.connection.close()
+ return 1
+ except Exception, e:
+ self.connected = 0
+ error = str(e)
+ if self.debugMode == 1:
+ import traceback
+ print traceback.format_exc()
+ print e
+ if error[0:11] == '[Errno 107]':
+ return 3 #the other side closed the connection before us [Errno 107] Transport endpoint is not connected
+ return 2
+ else:
+ return 0
+
+ def killPort(self):
+ killResult = os.popen('lsof -i tcp:' + str(self.port) + ' | grep "python " | awk -F" " ' + "'{print $2}'").read()
+ killResult = killResult.replace('\n','')
+ print killResult
+ if killResult!='':
+ print killResult
+ killPort = os.popen("kill -9 " + killResult).read()
+ return 1
+ return 0
diff --git a/For Weekly Test/tricode/ServerClassSoftware.pyc b/For Weekly Test/tricode/ServerClassSoftware.pyc
new file mode 100644
index 0000000..8027a64
--- /dev/null
+++ b/For Weekly Test/tricode/ServerClassSoftware.pyc
Binary files differ
diff --git a/For Weekly Test/tricode/TestProcessLog.log b/For Weekly Test/tricode/TestProcessLog.log
new file mode 100644
index 0000000..3bc674f
--- /dev/null
+++ b/For Weekly Test/tricode/TestProcessLog.log
@@ -0,0 +1,6668 @@
+
+
+------------------STARTED THE LOGGING 2011-10-14 16:48:43.047818 ------------------
+On: 2011-10-14 16:48:43.047897 Event: init Caller
+On: 2011-10-14 16:48:43.047921 Event: unisip
+On: 2011-10-14 16:48:45.057107 Event: Connected to Caller Handler
+On: 2011-10-14 16:48:45.057384 Event: Caller Handler respond
+On: 2011-10-14 16:48:45.058186 Event: Caller handler : Ready
+On: 2011-10-14 16:48:45.058227 Event: init Receiver
+On: 2011-10-14 16:48:45.058249 Event: GSMRZ3
+On: 2011-10-14 16:48:49.062494 Event: Cannt connect to Receiver
+On: 2011-10-14 16:48:49.062557 Event: 998 General Handler Error: Could not connect Destination handler
+On: 2011-10-14 16:48:49.174234 Event:
+On: 2011-10-14 16:48:49.174301 Event: init Caller
+On: 2011-10-14 16:48:49.174322 Event: GSMRZ1
+On: 2011-10-14 16:48:51.185893 Event: Connected to Caller Handler
+On: 2011-10-14 16:48:51.186074 Event: 999 General Handler Error: Could not connect to Caller handler
+On: 2011-10-14 16:48:51.323037 Event:
+On: 2011-10-14 16:48:51.323098 Event: init Caller
+On: 2011-10-14 16:48:51.323118 Event: landline
+On: 2011-10-14 16:48:53.326636 Event: Connected to Caller Handler
+On: 2011-10-14 16:48:53.326897 Event: Caller Handler respond
+On: 2011-10-14 16:48:53.328889 Event: Caller handler : Ready
+On: 2011-10-14 16:48:53.328929 Event: init Receiver
+On: 2011-10-14 16:48:53.328950 Event: GSMRZ2
+On: 2011-10-14 16:48:57.334508 Event: Cannt connect to Receiver
+On: 2011-10-14 16:48:57.334566 Event: 998 General Handler Error: Could not connect Destination handler
+On: 2011-10-14 16:48:57.426255 Event:
+On: 2011-10-14 16:48:57.426317 Event: init Caller
+On: 2011-10-14 16:48:57.426337 Event: sip
+On: 2011-10-14 16:48:59.434183 Event: Connected to Caller Handler
+On: 2011-10-14 16:48:59.434451 Event: Caller Handler respond
+On: 2011-10-14 16:48:59.435190 Event: Caller handler : Ready
+On: 2011-10-14 16:48:59.435228 Event: init Receiver
+On: 2011-10-14 16:48:59.435249 Event: GSMExt.Eplus
+On: 2011-10-14 16:49:01.438782 Event: Connected to Receiver Handler
+On: 2011-10-14 16:49:01.439062 Event: Receiver Handler respond
+On: 2011-10-14 16:49:01.439245 Event: Receiver handler : Ready
+On: 2011-10-14 16:49:01.439275 Event: Start Call
+On: 2011-10-14 16:49:01.441754 Event: Waiting Feedback
+On: 2011-10-14 16:49:15.572845 Event: Test Succeed
+On: 2011-10-14 16:49:15.658792 Event:
+On: 2011-10-14 16:49:15.658851 Event: init Caller
+On: 2011-10-14 16:49:15.658871 Event: sip
+On: 2011-10-14 16:49:17.668490 Event: Connected to Caller Handler
+On: 2011-10-14 16:49:17.668758 Event: Caller Handler respond
+On: 2011-10-14 16:49:17.669492 Event: Caller handler : Ready
+On: 2011-10-14 16:49:17.669529 Event: init Receiver
+On: 2011-10-14 16:49:17.669551 Event: GSMExt.O2
+On: 2011-10-14 16:49:19.675008 Event: Connected to Receiver Handler
+On: 2011-10-14 16:49:19.675291 Event: Receiver Handler respond
+On: 2011-10-14 16:49:19.675472 Event: Receiver handler : Ready
+On: 2011-10-14 16:49:19.675502 Event: Start Call
+On: 2011-10-14 16:49:19.675557 Event: Waiting Feedback
+On: 2011-10-14 16:49:34.675751 Event: Test Succeed
+On: 2011-10-14 16:49:34.814177 Event:
+On: 2011-10-14 16:49:34.814239 Event: init Caller
+On: 2011-10-14 16:49:34.814260 Event: sip
+On: 2011-10-14 16:49:36.821631 Event: Connected to Caller Handler
+On: 2011-10-14 16:49:36.822393 Event: Caller Handler respond
+On: 2011-10-14 16:49:36.823179 Event: Caller handler : Ready
+On: 2011-10-14 16:49:36.823216 Event: init Receiver
+On: 2011-10-14 16:49:36.823263 Event: GSMExt.Tm
+On: 2011-10-14 16:49:38.828996 Event: Connected to Receiver Handler
+On: 2011-10-14 16:49:38.829286 Event: Receiver Handler respond
+On: 2011-10-14 16:49:38.829466 Event: Receiver handler : Ready
+On: 2011-10-14 16:49:38.829495 Event: Start Call
+On: 2011-10-14 16:49:38.833871 Event: Waiting Feedback
+On: 2011-10-14 16:49:52.122495 Event: Test Succeed
+On: 2011-10-14 16:49:52.222286 Event:
+On: 2011-10-14 16:49:52.222399 Event: init Caller
+On: 2011-10-14 16:49:52.222426 Event: sip
+On: 2011-10-14 16:49:54.226646 Event: Connected to Caller Handler
+On: 2011-10-14 16:49:54.226909 Event: Caller Handler respond
+On: 2011-10-14 16:49:54.227955 Event: Caller handler : Ready
+On: 2011-10-14 16:49:54.228069 Event: init Receiver
+On: 2011-10-14 16:49:54.228094 Event: GSMExt.Voda
+On: 2011-10-14 16:49:56.234611 Event: Connected to Receiver Handler
+On: 2011-10-14 16:49:56.234894 Event: Receiver Handler respond
+On: 2011-10-14 16:49:56.235078 Event: Receiver handler : Ready
+On: 2011-10-14 16:49:56.235108 Event: Start Call
+On: 2011-10-14 16:49:56.235162 Event: Waiting Feedback
+On: 2011-10-14 16:50:11.235355 Event: Test Succeed
+On: 2011-10-14 16:50:11.356860 Event:
+On: 2011-10-14 16:50:11.356919 Event: init Caller
+On: 2011-10-14 16:50:11.356940 Event: sip
+On: 2011-10-14 16:50:13.370150 Event: Connected to Caller Handler
+On: 2011-10-14 16:50:13.370415 Event: Caller Handler respond
+On: 2011-10-14 16:50:13.371160 Event: Caller handler : Ready
+On: 2011-10-14 16:50:13.371199 Event: init Receiver
+On: 2011-10-14 16:50:13.371220 Event: GSMRZ1
+On: 2011-10-14 16:50:15.377341 Event: Connected to Receiver Handler
+On: 2011-10-14 16:50:15.379357 Event: 998 General Handler Error: Could not connect Destination handler
+
+
+------------------STARTED THE LOGGING 2011-10-14 17:02:17.015322 ------------------
+On: 2011-10-14 17:02:17.015398 Event: init Caller
+On: 2011-10-14 17:02:17.015422 Event: unisip
+On: 2011-10-14 17:02:19.027297 Event: Connected to Caller Handler
+On: 2011-10-14 17:02:19.027719 Event: Caller Handler respond
+On: 2011-10-14 17:02:19.028864 Event: Caller handler : Ready
+On: 2011-10-14 17:02:19.028900 Event: init Receiver
+On: 2011-10-14 17:02:19.028935 Event: GSMRZ1
+On: 2011-10-14 17:02:21.037954 Event: Connected to Receiver Handler
+On: 2011-10-14 17:02:21.039390 Event: 998 General Handler Error: Could not connect Destination handler
+On: 2011-10-14 17:02:21.187615 Event:
+On: 2011-10-14 17:02:21.187676 Event: init Caller
+On: 2011-10-14 17:02:21.187696 Event: GSMRZ2
+On: 2011-10-14 17:02:25.202495 Event: Cannt connect to Caller
+On: 2011-10-14 17:02:25.202552 Event: 999 General Handler Error: Could not connect to Caller handler
+On: 2011-10-14 17:02:25.454041 Event:
+On: 2011-10-14 17:02:25.454098 Event: init Caller
+On: 2011-10-14 17:02:25.454118 Event: landline
+On: 2011-10-14 17:02:27.458957 Event: Connected to Caller Handler
+On: 2011-10-14 17:02:27.459243 Event: Caller Handler respond
+On: 2011-10-14 17:02:27.462002 Event: Caller handler : Ready
+On: 2011-10-14 17:02:27.462041 Event: init Receiver
+On: 2011-10-14 17:02:27.462062 Event: GSMRZ3
+On: 2011-10-14 17:02:31.466944 Event: Cannt connect to Receiver
+On: 2011-10-14 17:02:31.467002 Event: 998 General Handler Error: Could not connect Destination handler
+On: 2011-10-14 17:02:31.555241 Event:
+On: 2011-10-14 17:02:31.555300 Event: init Caller
+On: 2011-10-14 17:02:31.555321 Event: sip
+On: 2011-10-14 17:02:33.559573 Event: Connected to Caller Handler
+On: 2011-10-14 17:02:33.559861 Event: Caller Handler respond
+On: 2011-10-14 17:02:33.560613 Event: Caller handler : Ready
+On: 2011-10-14 17:02:33.560654 Event: init Receiver
+On: 2011-10-14 17:02:33.560675 Event: GSMExt.O2
+On: 2011-10-14 17:02:35.565984 Event: Connected to Receiver Handler
+On: 2011-10-14 17:02:35.566257 Event: Receiver Handler respond
+On: 2011-10-14 17:02:35.566428 Event: Receiver handler : Ready
+On: 2011-10-14 17:02:35.566454 Event: Start Call
+On: 2011-10-14 17:02:35.566507 Event: Waiting Feedback
+On: 2011-10-14 17:02:50.566703 Event: Test Succeed
+On: 2011-10-14 17:02:50.690257 Event:
+On: 2011-10-14 17:02:50.690316 Event: init Caller
+On: 2011-10-14 17:02:50.690336 Event: sip
+On: 2011-10-14 17:02:52.693347 Event: Connected to Caller Handler
+On: 2011-10-14 17:02:52.693639 Event: Caller Handler respond
+On: 2011-10-14 17:02:52.694428 Event: Caller handler : Ready
+On: 2011-10-14 17:02:52.694467 Event: init Receiver
+On: 2011-10-14 17:02:52.694488 Event: GSMExt.Tm
+On: 2011-10-14 17:02:54.698713 Event: Connected to Receiver Handler
+On: 2011-10-14 17:02:54.698989 Event: Receiver Handler respond
+On: 2011-10-14 17:02:54.699168 Event: Receiver handler : Ready
+On: 2011-10-14 17:02:54.699198 Event: Start Call
+On: 2011-10-14 17:02:54.699251 Event: Waiting Feedback
+On: 2011-10-14 17:03:06.850925 Event: Test Succeed
+On: 2011-10-14 17:03:06.982319 Event:
+On: 2011-10-14 17:03:06.982380 Event: init Caller
+On: 2011-10-14 17:03:06.982400 Event: sip
+On: 2011-10-14 17:03:08.992838 Event: Connected to Caller Handler
+On: 2011-10-14 17:03:08.993132 Event: Caller Handler respond
+On: 2011-10-14 17:03:08.993940 Event: Caller handler : Ready
+On: 2011-10-14 17:03:08.993978 Event: init Receiver
+On: 2011-10-14 17:03:08.994000 Event: GSMExt.Voda
+On: 2011-10-14 17:03:11.002250 Event: Connected to Receiver Handler
+On: 2011-10-14 17:03:11.002619 Event: Receiver Handler respond
+On: 2011-10-14 17:03:11.002806 Event: Receiver handler : Ready
+On: 2011-10-14 17:03:11.002836 Event: Start Call
+On: 2011-10-14 17:03:11.002888 Event: Waiting Feedback
+On: 2011-10-14 17:03:26.003131 Event: Test Succeed
+On: 2011-10-14 17:03:26.139529 Event:
+On: 2011-10-14 17:03:26.139589 Event: init Caller
+On: 2011-10-14 17:03:26.139609 Event: sip
+On: 2011-10-14 17:03:28.147225 Event: Connected to Caller Handler
+On: 2011-10-14 17:03:28.147525 Event: Caller Handler respond
+On: 2011-10-14 17:03:28.148297 Event: Caller handler : Ready
+On: 2011-10-14 17:03:28.148415 Event: init Receiver
+On: 2011-10-14 17:03:28.148441 Event: GSMRZ2
+On: 2011-10-14 17:03:32.156159 Event: Cannt connect to Receiver
+On: 2011-10-14 17:03:32.156219 Event: 998 General Handler Error: Could not connect Destination handler
+
+
+------------------STARTED THE LOGGING 2011-10-14 17:09:19.782347 ------------------
+On: 2011-10-14 17:09:19.782432 Event: init Caller
+On: 2011-10-14 17:09:19.782456 Event: unisip
+On: 2011-10-14 17:09:21.786866 Event: Connected to Caller Handler
+On: 2011-10-14 17:09:21.787179 Event: Caller Handler respond
+On: 2011-10-14 17:09:21.787954 Event: Caller handler : Ready
+On: 2011-10-14 17:09:21.787993 Event: init Receiver
+On: 2011-10-14 17:09:21.788014 Event: GSMRZ1
+On: 2011-10-14 17:09:23.797901 Event: Connected to Receiver Handler
+On: 2011-10-14 17:09:23.798079 Event: 998 General Handler Error: Could not connect Destination handler
+On: 2011-10-14 17:09:27.846075 Event:
+On: 2011-10-14 17:09:27.846139 Event: init Caller
+On: 2011-10-14 17:09:27.846159 Event: GSMRZ2
+On: 2011-10-14 17:09:31.852698 Event: Cannt connect to Caller
+On: 2011-10-14 17:09:31.852759 Event: 999 General Handler Error: Could not connect to Caller handler
+On: 2011-10-14 17:09:35.901928 Event:
+On: 2011-10-14 17:09:35.901988 Event: init Caller
+On: 2011-10-14 17:09:35.902008 Event: landline
+On: 2011-10-14 17:09:37.907062 Event: Connected to Caller Handler
+On: 2011-10-14 17:09:37.907350 Event: Caller Handler respond
+On: 2011-10-14 17:09:37.909387 Event: Caller handler : Ready
+On: 2011-10-14 17:09:37.909425 Event: init Receiver
+On: 2011-10-14 17:09:37.909446 Event: GSMRZ3
+On: 2011-10-14 17:09:41.916529 Event: Cannt connect to Receiver
+On: 2011-10-14 17:09:41.916589 Event: 998 General Handler Error: Could not connect Destination handler
+On: 2011-10-14 17:09:45.955726 Event:
+On: 2011-10-14 17:09:45.955785 Event: init Caller
+On: 2011-10-14 17:09:45.955806 Event: sip
+On: 2011-10-14 17:09:47.960891 Event: Connected to Caller Handler
+On: 2011-10-14 17:09:47.961176 Event: Caller Handler respond
+On: 2011-10-14 17:09:47.961984 Event: Caller handler : Ready
+On: 2011-10-14 17:09:47.962018 Event: init Receiver
+On: 2011-10-14 17:09:47.962039 Event: GSMExt.Eplus
+On: 2011-10-14 17:09:49.966703 Event: Connected to Receiver Handler
+On: 2011-10-14 17:09:49.966981 Event: Receiver Handler respond
+On: 2011-10-14 17:09:49.967163 Event: Receiver handler : Ready
+On: 2011-10-14 17:09:49.967193 Event: Start Call
+On: 2011-10-14 17:09:49.967246 Event: Waiting Feedback
+On: 2011-10-14 17:10:04.630223 Event: Test Succeed
+On: 2011-10-14 17:10:08.671615 Event:
+On: 2011-10-14 17:10:08.671676 Event: init Caller
+On: 2011-10-14 17:10:08.671696 Event: sip
+On: 2011-10-14 17:10:10.676821 Event: Connected to Caller Handler
+On: 2011-10-14 17:10:10.677119 Event: Caller Handler respond
+On: 2011-10-14 17:10:10.677940 Event: Caller handler : Ready
+On: 2011-10-14 17:10:10.677978 Event: init Receiver
+On: 2011-10-14 17:10:10.677999 Event: GSMExt.O2
+On: 2011-10-14 17:10:12.682397 Event: Connected to Receiver Handler
+On: 2011-10-14 17:10:12.682682 Event: Receiver Handler respond
+On: 2011-10-14 17:10:12.682863 Event: Receiver handler : Ready
+On: 2011-10-14 17:10:12.682893 Event: Start Call
+On: 2011-10-14 17:10:12.682947 Event: Waiting Feedback
+On: 2011-10-14 17:10:27.683144 Event: Test Succeed
+On: 2011-10-14 17:10:31.758260 Event:
+On: 2011-10-14 17:10:31.758322 Event: init Caller
+On: 2011-10-14 17:10:31.758342 Event: sip
+On: 2011-10-14 17:10:33.764716 Event: Connected to Caller Handler
+On: 2011-10-14 17:10:33.765886 Event: Caller Handler respond
+On: 2011-10-14 17:10:33.767048 Event: Caller handler : Ready
+On: 2011-10-14 17:10:33.767087 Event: init Receiver
+On: 2011-10-14 17:10:33.767108 Event: GSMExt.Tm
+On: 2011-10-14 17:10:35.770713 Event: Connected to Receiver Handler
+On: 2011-10-14 17:10:35.770986 Event: Receiver Handler respond
+On: 2011-10-14 17:10:35.771152 Event: Receiver handler : Ready
+On: 2011-10-14 17:10:35.771175 Event: Start Call
+On: 2011-10-14 17:10:35.771226 Event: Waiting Feedback
+On: 2011-10-14 17:10:50.198871 Event: Test Succeed
+On: 2011-10-14 17:10:54.240012 Event:
+On: 2011-10-14 17:10:54.240073 Event: init Caller
+On: 2011-10-14 17:10:54.240093 Event: sip
+On: 2011-10-14 17:10:56.245178 Event: Connected to Caller Handler
+On: 2011-10-14 17:10:56.245475 Event: Caller Handler respond
+On: 2011-10-14 17:10:56.246666 Event: Caller handler : Ready
+On: 2011-10-14 17:10:56.246776 Event: init Receiver
+On: 2011-10-14 17:10:56.246824 Event: GSMExt.Voda
+On: 2011-10-14 17:10:58.250698 Event: Connected to Receiver Handler
+On: 2011-10-14 17:10:58.250976 Event: Receiver Handler respond
+On: 2011-10-14 17:10:58.251159 Event: Receiver handler : Ready
+On: 2011-10-14 17:10:58.251188 Event: Start Call
+On: 2011-10-14 17:10:58.251242 Event: Waiting Feedback
+On: 2011-10-14 17:11:13.251440 Event: Test Succeed
+On: 2011-10-14 17:11:17.335654 Event:
+On: 2011-10-14 17:11:17.335715 Event: init Caller
+On: 2011-10-14 17:11:17.335735 Event: sip
+On: 2011-10-14 17:11:19.340903 Event: Connected to Caller Handler
+On: 2011-10-14 17:11:19.341199 Event: Caller Handler respond
+On: 2011-10-14 17:11:19.342024 Event: Caller handler : Ready
+On: 2011-10-14 17:11:19.342063 Event: init Receiver
+On: 2011-10-14 17:11:19.342084 Event: GSMRZ2
+On: 2011-10-14 17:11:23.348517 Event: Cannt connect to Receiver
+On: 2011-10-14 17:11:23.348580 Event: 998 General Handler Error: Could not connect Destination handler
+
+
+------------------STARTED THE LOGGING 2011-10-14 17:54:19.054241 ------------------
+On: 2011-10-14 17:54:19.054318 Event: init Caller
+On: 2011-10-14 17:54:19.054342 Event: unisip
+On: 2011-10-14 17:54:21.059554 Event: Connected to Caller Handler
+On: 2011-10-14 17:54:21.059856 Event: Caller Handler respond
+On: 2011-10-14 17:54:21.060615 Event: Caller handler : Ready
+On: 2011-10-14 17:54:21.060654 Event: init Receiver
+On: 2011-10-14 17:54:21.060676 Event: GSMRZ3
+On: 2011-10-14 17:54:25.066497 Event: Cannt connect to Receiver
+On: 2011-10-14 17:54:25.066565 Event: 998 General Handler Error: Could not connect Destination handler
+On: 2011-10-14 17:54:29.112480 Event:
+On: 2011-10-14 17:54:29.112538 Event: init Caller
+On: 2011-10-14 17:54:29.112559 Event: GSMRZ1
+On: 2011-10-14 17:54:31.121907 Event: Connected to Caller Handler
+On: 2011-10-14 17:54:31.122082 Event: 999 General Handler Error: Could not connect to Caller handler
+On: 2011-10-14 17:54:35.171015 Event:
+On: 2011-10-14 17:54:35.171078 Event: init Caller
+On: 2011-10-14 17:54:35.171098 Event: landline
+On: 2011-10-14 17:54:37.175899 Event: Connected to Caller Handler
+On: 2011-10-14 17:54:37.177024 Event: Caller Handler respond
+On: 2011-10-14 17:54:37.179030 Event: Caller handler : Ready
+On: 2011-10-14 17:54:37.179068 Event: init Receiver
+On: 2011-10-14 17:54:37.179090 Event: GSMRZ2
+On: 2011-10-14 17:54:41.184507 Event: Cannt connect to Receiver
+On: 2011-10-14 17:54:41.184567 Event: 998 General Handler Error: Could not connect Destination handler
+On: 2011-10-14 17:54:45.227466 Event:
+On: 2011-10-14 17:54:45.227526 Event: init Caller
+On: 2011-10-14 17:54:45.227546 Event: sip
+On: 2011-10-14 17:54:47.232007 Event: Connected to Caller Handler
+On: 2011-10-14 17:54:47.233124 Event: Caller Handler respond
+On: 2011-10-14 17:54:47.233903 Event: Caller handler : Ready
+On: 2011-10-14 17:54:47.233936 Event: init Receiver
+On: 2011-10-14 17:54:47.233957 Event: GSMExt.O2
+On: 2011-10-14 17:54:49.238428 Event: Connected to Receiver Handler
+On: 2011-10-14 17:54:49.238702 Event: Receiver Handler respond
+On: 2011-10-14 17:54:49.238877 Event: Receiver handler : Ready
+On: 2011-10-14 17:54:49.238906 Event: Start Call
+On: 2011-10-14 17:54:49.238959 Event: Waiting Feedback
+On: 2011-10-14 17:55:05.240202 Event: Test Succeed
+On: 2011-10-14 17:55:09.306644 Event:
+On: 2011-10-14 17:55:09.306705 Event: init Caller
+On: 2011-10-14 17:55:09.306725 Event: sip
+On: 2011-10-14 17:55:11.314643 Event: Connected to Caller Handler
+On: 2011-10-14 17:55:11.314927 Event: Caller Handler respond
+On: 2011-10-14 17:55:11.316034 Event: Caller handler : Ready
+On: 2011-10-14 17:55:11.316069 Event: init Receiver
+On: 2011-10-14 17:55:11.316089 Event: GSMExt.Tm
+On: 2011-10-14 17:55:13.323648 Event: Connected to Receiver Handler
+On: 2011-10-14 17:55:13.323929 Event: Receiver Handler respond
+On: 2011-10-14 17:55:13.324107 Event: Receiver handler : Ready
+On: 2011-10-14 17:55:13.324136 Event: Start Call
+On: 2011-10-14 17:55:13.324189 Event: Waiting Feedback
+On: 2011-10-14 17:55:27.227099 Event: Test Succeed
+On: 2011-10-14 17:55:31.295462 Event:
+On: 2011-10-14 17:55:31.295523 Event: init Caller
+On: 2011-10-14 17:55:31.295543 Event: sip
+On: 2011-10-14 17:55:33.300552 Event: Connected to Caller Handler
+On: 2011-10-14 17:55:33.300842 Event: Caller Handler respond
+On: 2011-10-14 17:55:33.301586 Event: Caller handler : Ready
+On: 2011-10-14 17:55:33.301624 Event: init Receiver
+On: 2011-10-14 17:55:33.301646 Event: GSMExt.Voda
+On: 2011-10-14 17:55:35.306140 Event: Connected to Receiver Handler
+On: 2011-10-14 17:55:35.306452 Event: Receiver Handler respond
+On: 2011-10-14 17:55:35.306638 Event: Receiver handler : Ready
+On: 2011-10-14 17:55:35.306667 Event: Start Call
+On: 2011-10-14 17:55:35.306718 Event: Waiting Feedback
+On: 2011-10-14 17:55:47.780070 Event: Test Succeed
+On: 2011-10-14 17:55:51.827341 Event:
+On: 2011-10-14 17:55:51.827400 Event: init Caller
+On: 2011-10-14 17:55:51.827420 Event: sip
+On: 2011-10-14 17:55:53.832537 Event: Connected to Caller Handler
+On: 2011-10-14 17:55:53.832825 Event: Caller Handler respond
+On: 2011-10-14 17:55:53.833568 Event: Caller handler : Ready
+On: 2011-10-14 17:55:53.833672 Event: init Receiver
+On: 2011-10-14 17:55:53.833697 Event: GSMRZ1
+On: 2011-10-14 17:55:55.846020 Event: Connected to Receiver Handler
+On: 2011-10-14 17:55:55.846199 Event: 998 General Handler Error: Could not connect Destination handler
+
+
+------------------STARTED THE LOGGING 2011-10-14 17:56:09.923322 ------------------
+On: 2011-10-14 17:56:09.923442 Event: init Caller
+On: 2011-10-14 17:56:09.923467 Event: unisip
+On: 2011-10-14 17:56:11.928803 Event: Connected to Caller Handler
+On: 2011-10-14 17:56:11.929108 Event: Caller Handler respond
+On: 2011-10-14 17:56:11.929925 Event: Caller handler : Ready
+On: 2011-10-14 17:56:11.929965 Event: init Receiver
+On: 2011-10-14 17:56:11.929987 Event: GSMRZ1
+On: 2011-10-14 17:56:13.937880 Event: Connected to Receiver Handler
+On: 2011-10-14 17:56:13.938039 Event: 998 General Handler Error: Could not connect Destination handler
+On: 2011-10-14 17:56:17.982063 Event:
+On: 2011-10-14 17:56:17.982129 Event: init Caller
+On: 2011-10-14 17:56:17.982149 Event: GSMRZ2
+On: 2011-10-14 17:56:21.989423 Event: Cannt connect to Caller
+On: 2011-10-14 17:56:21.989482 Event: 999 General Handler Error: Could not connect to Caller handler
+On: 2011-10-14 17:56:26.038829 Event:
+On: 2011-10-14 17:56:26.038890 Event: init Caller
+On: 2011-10-14 17:56:26.038910 Event: landline
+On: 2011-10-14 17:56:28.042621 Event: Connected to Caller Handler
+On: 2011-10-14 17:56:28.042908 Event: Caller Handler respond
+On: 2011-10-14 17:56:28.044934 Event: Caller handler : Ready
+On: 2011-10-14 17:56:28.044972 Event: init Receiver
+On: 2011-10-14 17:56:28.044993 Event: GSMRZ3
+On: 2011-10-14 17:56:32.052406 Event: Cannt connect to Receiver
+On: 2011-10-14 17:56:32.052464 Event: 998 General Handler Error: Could not connect Destination handler
+On: 2011-10-14 17:56:36.092433 Event:
+On: 2011-10-14 17:56:36.092493 Event: init Caller
+On: 2011-10-14 17:56:36.092513 Event: sip
+On: 2011-10-14 17:56:38.096962 Event: Connected to Caller Handler
+On: 2011-10-14 17:56:38.097248 Event: Caller Handler respond
+On: 2011-10-14 17:56:38.098053 Event: Caller handler : Ready
+On: 2011-10-14 17:56:38.098090 Event: init Receiver
+On: 2011-10-14 17:56:38.098111 Event: GSMExt.Eplus
+On: 2011-10-14 17:56:40.102700 Event: Connected to Receiver Handler
+On: 2011-10-14 17:56:40.102980 Event: Receiver Handler respond
+On: 2011-10-14 17:56:40.103161 Event: Receiver handler : Ready
+On: 2011-10-14 17:56:40.103192 Event: Start Call
+On: 2011-10-14 17:56:40.105833 Event: Waiting Feedback
+On: 2011-10-14 17:56:53.696939 Event: Test Succeed
+On: 2011-10-14 17:56:57.737148 Event:
+On: 2011-10-14 17:56:57.737207 Event: init Caller
+On: 2011-10-14 17:56:57.737226 Event: sip
+On: 2011-10-14 17:56:59.742228 Event: Connected to Caller Handler
+On: 2011-10-14 17:56:59.742513 Event: Caller Handler respond
+On: 2011-10-14 17:56:59.743260 Event: Caller handler : Ready
+On: 2011-10-14 17:56:59.743300 Event: init Receiver
+On: 2011-10-14 17:56:59.743321 Event: GSMExt.Tm
+On: 2011-10-14 17:57:01.748093 Event: Connected to Receiver Handler
+On: 2011-10-14 17:57:01.748375 Event: Receiver Handler respond
+On: 2011-10-14 17:57:01.748555 Event: Receiver handler : Ready
+On: 2011-10-14 17:57:01.748585 Event: Start Call
+On: 2011-10-14 17:57:01.748638 Event: Waiting Feedback
+On: 2011-10-14 17:57:16.573319 Event: Test Succeed
+On: 2011-10-14 17:57:20.614179 Event:
+On: 2011-10-14 17:57:20.614240 Event: init Caller
+On: 2011-10-14 17:57:20.614259 Event: sip
+On: 2011-10-14 17:57:22.619457 Event: Connected to Caller Handler
+On: 2011-10-14 17:57:22.619731 Event: Caller Handler respond
+On: 2011-10-14 17:57:22.620471 Event: Caller handler : Ready
+On: 2011-10-14 17:57:22.620510 Event: init Receiver
+On: 2011-10-14 17:57:22.620531 Event: GSMExt.Voda
+On: 2011-10-14 17:57:24.625958 Event: Connected to Receiver Handler
+On: 2011-10-14 17:57:24.626280 Event: Receiver Handler respond
+On: 2011-10-14 17:57:24.626460 Event: Receiver handler : Ready
+On: 2011-10-14 17:57:24.626490 Event: Start Call
+On: 2011-10-14 17:57:24.626542 Event: Waiting Feedback
+On: 2011-10-14 17:57:38.118406 Event: Test Succeed
+On: 2011-10-14 17:57:42.158983 Event:
+On: 2011-10-14 17:57:42.159043 Event: init Caller
+On: 2011-10-14 17:57:42.159063 Event: sip
+On: 2011-10-14 17:57:44.163984 Event: Connected to Caller Handler
+On: 2011-10-14 17:57:44.164268 Event: Caller Handler respond
+On: 2011-10-14 17:57:44.165024 Event: Caller handler : Ready
+On: 2011-10-14 17:57:44.165131 Event: init Receiver
+On: 2011-10-14 17:57:44.165155 Event: GSMRZ2
+On: 2011-10-14 17:57:48.170396 Event: Cannt connect to Receiver
+On: 2011-10-14 17:57:48.170457 Event: 998 General Handler Error: Could not connect Destination handler
+
+
+------------------STARTED THE LOGGING 2011-10-14 17:58:29.409886 ------------------
+On: 2011-10-14 17:58:29.409962 Event: init Caller
+On: 2011-10-14 17:58:29.409986 Event: unisip
+On: 2011-10-14 17:58:31.414877 Event: Connected to Caller Handler
+On: 2011-10-14 17:58:31.415182 Event: Caller Handler respond
+On: 2011-10-14 17:58:31.415947 Event: Caller handler : Ready
+On: 2011-10-14 17:58:31.415986 Event: init Receiver
+On: 2011-10-14 17:58:31.416008 Event: GSMRZ2
+On: 2011-10-14 17:58:35.421932 Event: Cannt connect to Receiver
+On: 2011-10-14 17:58:35.422002 Event: 998 General Handler Error: Could not connect Destination handler
+On: 2011-10-14 17:58:39.467507 Event:
+On: 2011-10-14 17:58:39.467567 Event: init Caller
+On: 2011-10-14 17:58:39.467587 Event: GSMRZ1
+On: 2011-10-14 17:58:41.473882 Event: Connected to Caller Handler
+On: 2011-10-14 17:58:41.474049 Event: 999 General Handler Error: Could not connect to Caller handler
+On: 2011-10-14 17:58:45.527687 Event:
+On: 2011-10-14 17:58:45.527747 Event: init Caller
+On: 2011-10-14 17:58:45.527767 Event: landline
+On: 2011-10-14 17:58:47.532823 Event: Connected to Caller Handler
+On: 2011-10-14 17:58:47.533107 Event: Caller Handler respond
+On: 2011-10-14 17:58:47.535274 Event: Caller handler : Ready
+On: 2011-10-14 17:58:47.535312 Event: init Receiver
+On: 2011-10-14 17:58:47.535333 Event: GSMRZ3
+On: 2011-10-14 17:58:51.540494 Event: Cannt connect to Receiver
+On: 2011-10-14 17:58:51.540553 Event: 998 General Handler Error: Could not connect Destination handler
+On: 2011-10-14 17:58:55.583050 Event:
+On: 2011-10-14 17:58:55.583109 Event: init Caller
+On: 2011-10-14 17:58:55.583129 Event: sip
+On: 2011-10-14 17:58:57.586591 Event: Connected to Caller Handler
+On: 2011-10-14 17:58:57.586878 Event: Caller Handler respond
+On: 2011-10-14 17:58:57.587633 Event: Caller handler : Ready
+On: 2011-10-14 17:58:57.587670 Event: init Receiver
+On: 2011-10-14 17:58:57.587691 Event: GSMExt.Eplus
+On: 2011-10-14 17:58:59.593059 Event: Connected to Receiver Handler
+On: 2011-10-14 17:58:59.593333 Event: Receiver Handler respond
+On: 2011-10-14 17:58:59.593511 Event: Receiver handler : Ready
+On: 2011-10-14 17:58:59.593542 Event: Start Call
+On: 2011-10-14 17:58:59.593598 Event: Waiting Feedback
+On: 2011-10-14 17:59:12.109217 Event: Test Succeed
+On: 2011-10-14 17:59:16.149312 Event:
+On: 2011-10-14 17:59:16.149371 Event: init Caller
+On: 2011-10-14 17:59:16.149391 Event: sip
+On: 2011-10-14 17:59:18.154403 Event: Connected to Caller Handler
+On: 2011-10-14 17:59:18.154696 Event: Caller Handler respond
+On: 2011-10-14 17:59:18.155447 Event: Caller handler : Ready
+On: 2011-10-14 17:59:18.155487 Event: init Receiver
+On: 2011-10-14 17:59:18.155508 Event: GSMExt.O2
+On: 2011-10-14 17:59:20.160738 Event: Connected to Receiver Handler
+On: 2011-10-14 17:59:20.161022 Event: Receiver Handler respond
+On: 2011-10-14 17:59:20.161199 Event: Receiver handler : Ready
+On: 2011-10-14 17:59:20.161229 Event: Start Call
+On: 2011-10-14 17:59:20.161283 Event: Waiting Feedback
+On: 2011-10-14 17:59:46.161896 Event: Test Succeed
+On: 2011-10-14 17:59:50.226716 Event:
+On: 2011-10-14 17:59:50.226773 Event: init Caller
+On: 2011-10-14 17:59:50.226793 Event: sip
+On: 2011-10-14 17:59:52.234620 Event: Connected to Caller Handler
+On: 2011-10-14 17:59:52.234908 Event: Caller Handler respond
+On: 2011-10-14 17:59:52.235661 Event: Caller handler : Ready
+On: 2011-10-14 17:59:52.235697 Event: init Receiver
+On: 2011-10-14 17:59:52.235718 Event: GSMExt.Tm
+On: 2011-10-14 17:59:54.240622 Event: Connected to Receiver Handler
+On: 2011-10-14 17:59:54.240905 Event: Receiver Handler respond
+On: 2011-10-14 17:59:54.241087 Event: Receiver handler : Ready
+On: 2011-10-14 17:59:54.241118 Event: Start Call
+On: 2011-10-14 17:59:54.241171 Event: Waiting Feedback
+On: 2011-10-14 18:00:12.036969 Event: Test Succeed
+On: 2011-10-14 18:00:16.078159 Event:
+On: 2011-10-14 18:00:16.078218 Event: init Caller
+On: 2011-10-14 18:00:16.078238 Event: sip
+On: 2011-10-14 18:00:18.083252 Event: Connected to Caller Handler
+On: 2011-10-14 18:00:18.083533 Event: Caller Handler respond
+On: 2011-10-14 18:00:18.084279 Event: Caller handler : Ready
+On: 2011-10-14 18:00:18.084387 Event: init Receiver
+On: 2011-10-14 18:00:18.084412 Event: GSMRZ1
+On: 2011-10-14 18:00:20.093905 Event: Connected to Receiver Handler
+On: 2011-10-14 18:00:20.094082 Event: 998 General Handler Error: Could not connect Destination handler
+
+
+------------------STARTED THE LOGGING 2011-10-14 18:30:37.654965 ------------------
+On: 2011-10-14 18:30:37.655045 Event: init Caller
+On: 2011-10-14 18:30:37.655066 Event: sip
+On: 2011-10-14 18:30:39.660344 Event: Connected to Caller Handler
+On: 2011-10-14 18:30:39.660651 Event: Caller Handler respond
+On: 2011-10-14 18:30:39.661416 Event: Caller handler : Ready
+On: 2011-10-14 18:30:39.661456 Event: init Receiver
+On: 2011-10-14 18:30:39.661477 Event: GSMRZ2
+On: 2011-10-14 18:30:43.668866 Event: Connected to Receiver Handler
+On: 2011-10-14 18:30:43.677584 Event: Receiver Handler respond
+On: 2011-10-14 18:30:43.680326 Event: Receiver handler : Ready
+On: 2011-10-14 18:30:43.680396 Event: Start Call
+On: 2011-10-14 18:30:43.680468 Event: Waiting Feedback
+On: 2011-10-14 18:30:59.681724 Event: Test Failed
+
+
+------------------STARTED THE LOGGING 2011-10-14 18:33:07.577020 ------------------
+On: 2011-10-14 18:33:07.577099 Event: init Caller
+On: 2011-10-14 18:33:07.577120 Event: sip
+On: 2011-10-14 18:33:09.582493 Event: Connected to Caller Handler
+On: 2011-10-14 18:33:09.582805 Event: Caller Handler respond
+On: 2011-10-14 18:33:09.583564 Event: Caller handler : Ready
+On: 2011-10-14 18:33:09.583604 Event: init Receiver
+On: 2011-10-14 18:33:09.583626 Event: GSMRZ2
+On: 2011-10-14 18:33:13.587780 Event: Connected to Receiver Handler
+On: 2011-10-14 18:33:13.595290 Event: Receiver Handler respond
+On: 2011-10-14 18:33:13.598583 Event: Receiver handler : Ready
+On: 2011-10-14 18:33:13.598652 Event: Start Call
+On: 2011-10-14 18:33:13.598721 Event: Waiting Feedback
+On: 2011-10-14 18:33:29.599225 Event: Test Failed
+
+
+------------------STARTED THE LOGGING 2011-10-14 18:34:02.941498 ------------------
+On: 2011-10-14 18:34:02.941578 Event: init Caller
+On: 2011-10-14 18:34:02.941599 Event: sip
+On: 2011-10-14 18:34:04.946674 Event: Connected to Caller Handler
+On: 2011-10-14 18:34:04.947075 Event: Caller Handler respond
+On: 2011-10-14 18:34:04.948208 Event: Caller handler : Ready
+On: 2011-10-14 18:34:04.948248 Event: init Receiver
+On: 2011-10-14 18:34:04.948270 Event: GSMRZ2
+On: 2011-10-14 18:34:08.955905 Event: Connected to Receiver Handler
+On: 2011-10-14 18:34:08.963554 Event: Receiver Handler respond
+On: 2011-10-14 18:34:08.966583 Event: Receiver handler : Ready
+On: 2011-10-14 18:34:08.966634 Event: Start Call
+On: 2011-10-14 18:34:08.966770 Event: Waiting Feedback
+On: 2011-10-14 18:34:24.968020 Event: Test Failed
+
+
+------------------STARTED THE LOGGING 2011-10-14 18:36:13.490651 ------------------
+On: 2011-10-14 18:36:13.490727 Event: init Caller
+On: 2011-10-14 18:36:13.490748 Event: sip
+On: 2011-10-14 18:36:15.506869 Event: Connected to Caller Handler
+On: 2011-10-14 18:36:15.507177 Event: Caller Handler respond
+On: 2011-10-14 18:36:15.507942 Event: Caller handler : Ready
+On: 2011-10-14 18:36:15.507983 Event: init Receiver
+On: 2011-10-14 18:36:15.508004 Event: GSMRZ2
+On: 2011-10-14 18:36:19.515418 Event: Cannt connect to Receiver
+On: 2011-10-14 18:36:19.515475 Event: 998 General Handler Error: Could not connect Destination handler
+
+
+------------------STARTED THE LOGGING 2011-10-14 18:36:58.310555 ------------------
+On: 2011-10-14 18:36:58.310636 Event: init Caller
+On: 2011-10-14 18:36:58.310657 Event: sip
+On: 2011-10-14 18:37:00.326511 Event: Connected to Caller Handler
+On: 2011-10-14 18:37:00.326827 Event: Caller Handler respond
+On: 2011-10-14 18:37:00.327971 Event: Caller handler : Ready
+On: 2011-10-14 18:37:00.328011 Event: init Receiver
+On: 2011-10-14 18:37:00.328032 Event: GSMRZ2
+On: 2011-10-14 18:37:04.334401 Event: Connected to Receiver Handler
+On: 2011-10-14 18:37:04.342730 Event: Receiver Handler respond
+On: 2011-10-14 18:37:04.344957 Event: Receiver handler : Ready
+On: 2011-10-14 18:37:04.344995 Event: Start Call
+On: 2011-10-14 18:37:04.345131 Event: Waiting Feedback
+On: 2011-10-14 18:37:20.346389 Event: Test Failed
+
+
+------------------STARTED THE LOGGING 2011-10-14 18:45:23.282168 ------------------
+On: 2011-10-14 18:45:23.282250 Event: init Caller
+On: 2011-10-14 18:45:23.282272 Event: sip
+On: 2011-10-14 18:45:25.290285 Event: Connected to Caller Handler
+On: 2011-10-14 18:45:25.290592 Event: Caller Handler respond
+On: 2011-10-14 18:45:25.291359 Event: Caller handler : Ready
+On: 2011-10-14 18:45:25.291400 Event: init Receiver
+On: 2011-10-14 18:45:25.291421 Event: GSMRZ2
+On: 2011-10-14 18:45:29.298663 Event: Connected to Receiver Handler
+On: 2011-10-14 18:45:29.306028 Event: Receiver Handler respond
+On: 2011-10-14 18:45:29.308925 Event: Receiver handler : Ready
+On: 2011-10-14 18:45:29.308974 Event: Start Call
+On: 2011-10-14 18:45:29.309035 Event: Waiting Feedback
+On: 2011-10-14 18:45:45.309994 Event: Test Failed
+
+
+------------------STARTED THE LOGGING 2011-10-14 18:46:54.248959 ------------------
+On: 2011-10-14 18:46:54.249038 Event: init Caller
+On: 2011-10-14 18:46:54.249059 Event: sip
+On: 2011-10-14 18:46:56.254284 Event: Connected to Caller Handler
+On: 2011-10-14 18:46:56.254597 Event: Caller Handler respond
+On: 2011-10-14 18:46:56.255727 Event: Caller handler : Ready
+On: 2011-10-14 18:46:56.255767 Event: init Receiver
+On: 2011-10-14 18:46:56.255788 Event: GSMRZ2
+On: 2011-10-14 18:47:00.263819 Event: Connected to Receiver Handler
+On: 2011-10-14 18:47:00.271754 Event: Receiver Handler respond
+On: 2011-10-14 18:47:00.274028 Event: Receiver handler : Ready
+On: 2011-10-14 18:47:00.274087 Event: Start Call
+On: 2011-10-14 18:47:00.274154 Event: Waiting Feedback
+On: 2011-10-14 18:47:16.275413 Event: Test Failed
+
+
+------------------STARTED THE LOGGING 2011-10-14 18:48:33.000632 ------------------
+On: 2011-10-14 18:48:33.000712 Event: init Caller
+On: 2011-10-14 18:48:33.000733 Event: sip
+On: 2011-10-14 18:48:35.006067 Event: Connected to Caller Handler
+On: 2011-10-14 18:48:35.006382 Event: Caller Handler respond
+On: 2011-10-14 18:48:35.007136 Event: Caller handler : Ready
+On: 2011-10-14 18:48:35.007178 Event: init Receiver
+On: 2011-10-14 18:48:35.007199 Event: GSMRZ2
+On: 2011-10-14 18:48:39.012437 Event: Connected to Receiver Handler
+On: 2011-10-14 18:48:39.020171 Event: Receiver Handler respond
+On: 2011-10-14 18:48:39.022612 Event: Receiver handler : Ready
+On: 2011-10-14 18:48:39.022653 Event: Start Call
+On: 2011-10-14 18:48:39.022789 Event: Waiting Feedback
+On: 2011-10-14 18:48:55.024049 Event: Test Failed
+
+
+------------------STARTED THE LOGGING 2011-10-14 18:50:09.706776 ------------------
+On: 2011-10-14 18:50:09.706858 Event: init Caller
+On: 2011-10-14 18:50:09.706880 Event: sip
+On: 2011-10-14 18:50:11.721555 Event: Connected to Caller Handler
+On: 2011-10-14 18:50:11.721933 Event: Caller Handler respond
+On: 2011-10-14 18:50:11.722712 Event: Caller handler : Ready
+On: 2011-10-14 18:50:11.722752 Event: init Receiver
+On: 2011-10-14 18:50:11.722773 Event: GSMRZ2
+On: 2011-10-14 18:50:15.727109 Event: Cannt connect to Receiver
+On: 2011-10-14 18:50:15.727177 Event: 998 General Handler Error: Could not connect Destination handler
+
+
+------------------STARTED THE LOGGING 2011-10-14 18:50:52.075113 ------------------
+On: 2011-10-14 18:50:52.075194 Event: init Caller
+On: 2011-10-14 18:50:52.075215 Event: sip
+On: 2011-10-14 18:50:54.090244 Event: Connected to Caller Handler
+On: 2011-10-14 18:50:54.090545 Event: Caller Handler respond
+On: 2011-10-14 18:50:54.091309 Event: Caller handler : Ready
+On: 2011-10-14 18:50:54.091345 Event: init Receiver
+On: 2011-10-14 18:50:54.091366 Event: GSMRZ2
+On: 2011-10-14 18:50:58.098377 Event: Connected to Receiver Handler
+On: 2011-10-14 18:50:58.106048 Event: Receiver Handler respond
+On: 2011-10-14 18:50:58.108280 Event: Receiver handler : Ready
+On: 2011-10-14 18:50:58.108332 Event: Start Call
+On: 2011-10-14 18:50:58.108395 Event: Waiting Feedback
+On: 2011-10-14 18:51:14.109661 Event: Test Failed
+
+
+------------------STARTED THE LOGGING 2011-10-14 18:54:58.168192 ------------------
+On: 2011-10-14 18:54:58.168274 Event: init Caller
+On: 2011-10-14 18:54:58.168295 Event: sip
+On: 2011-10-14 18:55:00.173616 Event: Connected to Caller Handler
+On: 2011-10-14 18:55:00.173966 Event: Caller Handler respond
+On: 2011-10-14 18:55:00.175088 Event: Caller handler : Ready
+On: 2011-10-14 18:55:00.175129 Event: init Receiver
+On: 2011-10-14 18:55:00.175150 Event: GSMRZ2
+On: 2011-10-14 18:55:04.182387 Event: Connected to Receiver Handler
+On: 2011-10-14 18:55:04.190455 Event: Receiver Handler respond
+On: 2011-10-14 18:55:04.192855 Event: Receiver handler : Ready
+On: 2011-10-14 18:55:04.192906 Event: Start Call
+On: 2011-10-14 18:55:04.193041 Event: Waiting Feedback
+On: 2011-10-14 18:55:20.194332 Event: Test Failed
+
+
+------------------STARTED THE LOGGING 2011-10-14 18:55:44.731891 ------------------
+On: 2011-10-14 18:55:44.731968 Event: init Caller
+On: 2011-10-14 18:55:44.731989 Event: sip
+On: 2011-10-14 18:55:46.741458 Event: Connected to Caller Handler
+On: 2011-10-14 18:55:46.741948 Event: Caller Handler respond
+On: 2011-10-14 18:55:46.742783 Event: Caller handler : Ready
+On: 2011-10-14 18:55:46.742822 Event: init Receiver
+On: 2011-10-14 18:55:46.742843 Event: GSMRZ2
+On: 2011-10-14 18:55:50.748626 Event: Connected to Receiver Handler
+On: 2011-10-14 18:55:50.756582 Event: Receiver Handler respond
+On: 2011-10-14 18:55:50.758843 Event: Receiver handler : Ready
+On: 2011-10-14 18:55:50.758903 Event: Start Call
+On: 2011-10-14 18:55:50.759048 Event: Waiting Feedback
+On: 2011-10-14 18:56:06.759479 Event: Test Failed
+
+
+------------------STARTED THE LOGGING 2011-10-14 19:02:08.866589 ------------------
+On: 2011-10-14 19:02:08.866670 Event: init Caller
+On: 2011-10-14 19:02:08.866693 Event: unisip
+On: 2011-10-14 19:02:10.880298 Event: Connected to Caller Handler
+On: 2011-10-14 19:02:10.880608 Event: Caller Handler respond
+On: 2011-10-14 19:02:10.881729 Event: Caller handler : Ready
+On: 2011-10-14 19:02:10.881812 Event: init Receiver
+On: 2011-10-14 19:02:10.881857 Event: GSMRZ2
+On: 2011-10-14 19:02:14.888573 Event: Cannt connect to Receiver
+On: 2011-10-14 19:02:14.888637 Event: 998 General Handler Error: Could not connect Destination handler
+
+
+------------------STARTED THE LOGGING 2011-10-14 19:02:36.093168 ------------------
+On: 2011-10-14 19:02:36.093247 Event: init Caller
+On: 2011-10-14 19:02:36.093270 Event: unisip
+On: 2011-10-14 19:02:38.098451 Event: Connected to Caller Handler
+On: 2011-10-14 19:02:38.099564 Event: Caller Handler respond
+On: 2011-10-14 19:02:38.100341 Event: Caller handler : Ready
+On: 2011-10-14 19:02:38.100381 Event: init Receiver
+On: 2011-10-14 19:02:38.100401 Event: GSMRZ2
+On: 2011-10-14 19:02:42.105904 Event: Connected to Receiver Handler
+On: 2011-10-14 19:02:42.113449 Event: Receiver Handler respond
+On: 2011-10-14 19:02:42.116312 Event: Receiver handler : Ready
+On: 2011-10-14 19:02:42.116360 Event: Start Call
+On: 2011-10-14 19:02:42.116421 Event: Waiting Feedback
+On: 2011-10-14 19:02:58.117683 Event: Test Failed
+
+
+------------------STARTED THE LOGGING 2011-10-14 19:03:14.040640 ------------------
+On: 2011-10-14 19:03:14.040716 Event: init Caller
+On: 2011-10-14 19:03:14.040738 Event: unisip
+On: 2011-10-14 19:03:16.045935 Event: Connected to Caller Handler
+On: 2011-10-14 19:03:16.046248 Event: Caller Handler respond
+On: 2011-10-14 19:03:16.047355 Event: Caller handler : Ready
+On: 2011-10-14 19:03:16.047394 Event: init Receiver
+On: 2011-10-14 19:03:16.047414 Event: GSMRZ2
+On: 2011-10-14 19:03:20.052438 Event: Connected to Receiver Handler
+On: 2011-10-14 19:03:20.059765 Event: Receiver Handler respond
+On: 2011-10-14 19:03:20.061978 Event: Receiver handler : Ready
+On: 2011-10-14 19:03:20.062016 Event: Start Call
+On: 2011-10-14 19:03:20.062147 Event: Waiting Feedback
+On: 2011-10-14 19:03:36.063393 Event: Test Failed
+
+
+------------------STARTED THE LOGGING 2011-10-14 19:13:40.499829 ------------------
+On: 2011-10-14 19:13:40.499910 Event: init Caller
+On: 2011-10-14 19:13:40.499935 Event: unisip
+On: 2011-10-14 19:13:42.505138 Event: Connected to Caller Handler
+On: 2011-10-14 19:13:42.505546 Event: Caller Handler respond
+On: 2011-10-14 19:13:42.506734 Event: Caller handler : Ready
+On: 2011-10-14 19:13:42.506775 Event: init Receiver
+On: 2011-10-14 19:13:42.506797 Event: GSMRZ3
+On: 2011-10-14 19:13:46.529001 Event: Cannt connect to Receiver
+On: 2011-10-14 19:13:46.529062 Event: 998 General Handler Error: Could not connect Destination handler
+On: 2011-10-14 19:13:50.584417 Event:
+On: 2011-10-14 19:13:50.584480 Event: init Caller
+On: 2011-10-14 19:13:50.584500 Event: GSMRZ1
+On: 2011-10-14 19:13:52.592783 Event: Connected to Caller Handler
+On: 2011-10-14 19:13:52.600671 Event: 999 General Handler Error: Could not connect to Caller handler
+On: 2011-10-14 19:13:56.646369 Event:
+On: 2011-10-14 19:13:56.646431 Event: init Caller
+On: 2011-10-14 19:13:56.646452 Event: landline
+On: 2011-10-14 19:13:58.650187 Event: Connected to Caller Handler
+On: 2011-10-14 19:13:58.650580 Event: Caller Handler respond
+On: 2011-10-14 19:13:58.652987 Event: Caller handler : Ready
+On: 2011-10-14 19:13:58.653025 Event: init Receiver
+On: 2011-10-14 19:13:58.653047 Event: GSMRZ2
+On: 2011-10-14 19:14:02.660086 Event: Connected to Receiver Handler
+On: 2011-10-14 19:14:02.664464 Event: 998 General Handler Error: Could not connect Destination handler
+On: 2011-10-14 19:14:06.707184 Event:
+On: 2011-10-14 19:14:06.707249 Event: init Caller
+On: 2011-10-14 19:14:06.707269 Event: sip
+On: 2011-10-14 19:14:08.710975 Event: Connected to Caller Handler
+On: 2011-10-14 19:14:08.711270 Event: Caller Handler respond
+On: 2011-10-14 19:14:08.712029 Event: Caller handler : Ready
+On: 2011-10-14 19:14:08.712067 Event: init Receiver
+On: 2011-10-14 19:14:08.712089 Event: GSMExt.O2
+On: 2011-10-14 19:14:10.717527 Event: Connected to Receiver Handler
+On: 2011-10-14 19:14:10.717830 Event: Receiver Handler respond
+On: 2011-10-14 19:14:10.718013 Event: Receiver handler : Ready
+On: 2011-10-14 19:14:10.718042 Event: Start Call
+On: 2011-10-14 19:14:10.718098 Event: Waiting Feedback
+On: 2011-10-14 19:14:26.719299 Event: Test Succeed
+On: 2011-10-14 19:14:30.786603 Event:
+On: 2011-10-14 19:14:30.786668 Event: init Caller
+On: 2011-10-14 19:14:30.786688 Event: sip
+On: 2011-10-14 19:14:32.794781 Event: Connected to Caller Handler
+On: 2011-10-14 19:14:32.795188 Event: Caller Handler respond
+On: 2011-10-14 19:14:32.795953 Event: Caller handler : Ready
+On: 2011-10-14 19:14:32.795988 Event: init Receiver
+On: 2011-10-14 19:14:32.796010 Event: GSMExt.Tm
+On: 2011-10-14 19:14:34.801709 Event: Connected to Receiver Handler
+On: 2011-10-14 19:14:34.802000 Event: Receiver Handler respond
+On: 2011-10-14 19:14:34.802181 Event: Receiver handler : Ready
+On: 2011-10-14 19:14:34.802210 Event: Start Call
+On: 2011-10-14 19:14:34.802264 Event: Waiting Feedback
+On: 2011-10-14 19:14:54.553524 Event: Test Succeed
+On: 2011-10-14 19:14:58.595749 Event:
+On: 2011-10-14 19:14:58.595811 Event: init Caller
+On: 2011-10-14 19:14:58.595832 Event: sip
+On: 2011-10-14 19:15:00.600820 Event: Connected to Caller Handler
+On: 2011-10-14 19:15:00.601217 Event: Caller Handler respond
+On: 2011-10-14 19:15:00.602060 Event: Caller handler : Ready
+On: 2011-10-14 19:15:00.602098 Event: init Receiver
+On: 2011-10-14 19:15:00.602120 Event: GSMExt.Voda
+On: 2011-10-14 19:15:02.606411 Event: Connected to Receiver Handler
+On: 2011-10-14 19:15:02.606695 Event: Receiver Handler respond
+On: 2011-10-14 19:15:02.606876 Event: Receiver handler : Ready
+On: 2011-10-14 19:15:02.606905 Event: Start Call
+On: 2011-10-14 19:15:02.606959 Event: Waiting Feedback
+On: 2011-10-14 19:15:14.673554 Event: Test Succeed
+On: 2011-10-14 19:15:18.714420 Event:
+On: 2011-10-14 19:15:18.714482 Event: init Caller
+On: 2011-10-14 19:15:18.714502 Event: sip
+On: 2011-10-14 19:15:20.719170 Event: Connected to Caller Handler
+On: 2011-10-14 19:15:20.719466 Event: Caller Handler respond
+On: 2011-10-14 19:15:20.720229 Event: Caller handler : Ready
+On: 2011-10-14 19:15:20.720527 Event: init Receiver
+On: 2011-10-14 19:15:20.720565 Event: GSMRZ1
+On: 2011-10-14 19:15:22.729621 Event: Connected to Receiver Handler
+On: 2011-10-14 19:15:22.729804 Event: 998 General Handler Error: Could not connect Destination handler
+
+
+------------------STARTED THE LOGGING 2011-10-14 19:16:37.673946 ------------------
+On: 2011-10-14 19:16:37.674030 Event: init Caller
+On: 2011-10-14 19:16:37.674055 Event: unisip
+On: 2011-10-14 19:16:39.678557 Event: Connected to Caller Handler
+On: 2011-10-14 19:16:39.678878 Event: Caller Handler respond
+On: 2011-10-14 19:16:39.679644 Event: Caller handler : Ready
+On: 2011-10-14 19:16:39.679683 Event: init Receiver
+On: 2011-10-14 19:16:39.679705 Event: GSMRZ1
+On: 2011-10-14 19:16:41.689601 Event: Connected to Receiver Handler
+On: 2011-10-14 19:16:41.689788 Event: 998 General Handler Error: Could not connect Destination handler
+On: 2011-10-14 19:16:45.730564 Event:
+On: 2011-10-14 19:16:45.730628 Event: init Caller
+On: 2011-10-14 19:16:45.730648 Event: GSMRZ2
+On: 2011-10-14 19:16:49.736116 Event: Connected to Caller Handler
+On: 2011-10-14 19:16:49.740461 Event: 999 General Handler Error: Could not connect to Caller handler
+On: 2011-10-14 19:16:53.789365 Event:
+On: 2011-10-14 19:16:53.789431 Event: init Caller
+On: 2011-10-14 19:16:53.789452 Event: landline
+On: 2011-10-14 19:16:55.793221 Event: Connected to Caller Handler
+On: 2011-10-14 19:16:55.793560 Event: Caller Handler respond
+On: 2011-10-14 19:16:55.796037 Event: Caller handler : Ready
+On: 2011-10-14 19:16:55.796075 Event: init Receiver
+On: 2011-10-14 19:16:55.796097 Event: GSMRZ3
+On: 2011-10-14 19:16:59.802165 Event: Cannt connect to Receiver
+On: 2011-10-14 19:16:59.802228 Event: 998 General Handler Error: Could not connect Destination handler
+On: 2011-10-14 19:17:03.844000 Event:
+On: 2011-10-14 19:17:03.844066 Event: init Caller
+On: 2011-10-14 19:17:03.844087 Event: sip
+On: 2011-10-14 19:17:05.849334 Event: Connected to Caller Handler
+On: 2011-10-14 19:17:05.849671 Event: Caller Handler respond
+On: 2011-10-14 19:17:05.850545 Event: Caller handler : Ready
+On: 2011-10-14 19:17:05.850597 Event: init Receiver
+On: 2011-10-14 19:17:05.850621 Event: GSMExt.Eplus
+On: 2011-10-14 19:17:07.854448 Event: Connected to Receiver Handler
+On: 2011-10-14 19:17:07.854731 Event: Receiver Handler respond
+On: 2011-10-14 19:17:07.854912 Event: Receiver handler : Ready
+On: 2011-10-14 19:17:07.854941 Event: Start Call
+On: 2011-10-14 19:17:07.855016 Event: Waiting Feedback
+On: 2011-10-14 19:17:21.967911 Event: Test Succeed
+On: 2011-10-14 19:17:26.008874 Event:
+On: 2011-10-14 19:17:26.008940 Event: init Caller
+On: 2011-10-14 19:17:26.008960 Event: sip
+On: 2011-10-14 19:17:28.014035 Event: Connected to Caller Handler
+On: 2011-10-14 19:17:28.014435 Event: Caller Handler respond
+On: 2011-10-14 19:17:28.015521 Event: Caller handler : Ready
+On: 2011-10-14 19:17:28.015561 Event: init Receiver
+On: 2011-10-14 19:17:28.015583 Event: GSMExt.O2
+On: 2011-10-14 19:17:30.021268 Event: Connected to Receiver Handler
+On: 2011-10-14 19:17:30.021624 Event: Receiver Handler respond
+On: 2011-10-14 19:17:30.021819 Event: Receiver handler : Ready
+On: 2011-10-14 19:17:30.021851 Event: Start Call
+On: 2011-10-14 19:17:30.021908 Event: Waiting Feedback
+On: 2011-10-14 19:17:46.023116 Event: Test Succeed
+On: 2011-10-14 19:17:50.093005 Event:
+On: 2011-10-14 19:17:50.093070 Event: init Caller
+On: 2011-10-14 19:17:50.093091 Event: sip
+On: 2011-10-14 19:17:52.098195 Event: Connected to Caller Handler
+On: 2011-10-14 19:17:52.098598 Event: Caller Handler respond
+On: 2011-10-14 19:17:52.099325 Event: Caller handler : Ready
+On: 2011-10-14 19:17:52.099365 Event: init Receiver
+On: 2011-10-14 19:17:52.099387 Event: GSMExt.Tm
+On: 2011-10-14 19:17:54.105130 Event: Connected to Receiver Handler
+On: 2011-10-14 19:17:54.105419 Event: Receiver Handler respond
+On: 2011-10-14 19:17:54.105667 Event: Receiver handler : Ready
+On: 2011-10-14 19:17:54.105699 Event: Start Call
+On: 2011-10-14 19:17:54.105758 Event: Waiting Feedback
+On: 2011-10-14 19:18:06.329562 Event: Test Succeed
+On: 2011-10-14 19:18:10.366167 Event:
+On: 2011-10-14 19:18:10.366229 Event: init Caller
+On: 2011-10-14 19:18:10.366249 Event: sip
+On: 2011-10-14 19:18:12.371368 Event: Connected to Caller Handler
+On: 2011-10-14 19:18:12.371654 Event: Caller Handler respond
+On: 2011-10-14 19:18:12.372768 Event: Caller handler : Ready
+On: 2011-10-14 19:18:12.372867 Event: init Receiver
+On: 2011-10-14 19:18:12.372893 Event: GSMRZ2
+On: 2011-10-14 19:18:16.380394 Event: Cannt connect to Receiver
+On: 2011-10-14 19:18:16.380457 Event: 998 General Handler Error: Could not connect Destination handler
+
+
+------------------STARTED THE LOGGING 2011-10-17 16:22:13.700808 ------------------
+On: 2011-10-17 16:22:13.700887 Event: init Caller
+On: 2011-10-17 16:22:13.700913 Event: GSMRZ2
+On: 2011-10-17 16:22:17.708094 Event: Connected to Caller Handler
+On: 2011-10-17 16:22:17.715559 Event: Caller Handler respond
+On: 2011-10-17 16:22:17.717933 Event: Caller handler : Ready
+On: 2011-10-17 16:22:17.717995 Event: init Receiver
+On: 2011-10-17 16:22:17.718017 Event: GSMRZ3
+On: 2011-10-17 16:22:21.725220 Event: Connected to Receiver Handler
+On: 2011-10-17 16:22:31.725503 Event: 998 General Handler Error: Could not connect Destination handler
+
+
+------------------STARTED THE LOGGING 2011-10-17 16:42:41.732255 ------------------
+On: 2011-10-17 16:42:41.732331 Event: init Caller
+On: 2011-10-17 16:42:41.732355 Event: GSMRZ2
+On: 2011-10-17 16:42:45.739547 Event: Cannt connect to Caller
+On: 2011-10-17 16:42:45.739604 Event: 999 General Handler Error: Could not connect to Caller handler
+
+
+------------------STARTED THE LOGGING 2011-10-17 16:43:35.764592 ------------------
+On: 2011-10-17 16:43:35.764673 Event: init Caller
+On: 2011-10-17 16:43:35.764699 Event: GSMRZ2
+On: 2011-10-17 16:43:39.771729 Event: Connected to Caller Handler
+On: 2011-10-17 16:43:39.779109 Event: Caller Handler respond
+On: 2011-10-17 16:43:39.781265 Event: Caller handler : Ready
+On: 2011-10-17 16:43:39.781300 Event: init Receiver
+On: 2011-10-17 16:43:39.781321 Event: GSMRZ3
+On: 2011-10-17 16:43:43.788477 Event: Cannt connect to Receiver
+On: 2011-10-17 16:43:43.788539 Event: 998 General Handler Error: Could not connect Destination handler
+
+
+------------------STARTED THE LOGGING 2011-10-17 16:44:16.386165 ------------------
+On: 2011-10-17 16:44:16.386242 Event: init Caller
+On: 2011-10-17 16:44:16.386267 Event: GSMRZ3
+On: 2011-10-17 16:44:20.404189 Event: Connected to Caller Handler
+On: 2011-10-17 16:44:30.404457 Event: 999 General Handler Error: Could not connect to Caller handler
+
+
+------------------STARTED THE LOGGING 2011-10-17 16:44:54.400859 ------------------
+On: 2011-10-17 16:44:54.400938 Event: init Caller
+On: 2011-10-17 16:44:54.400962 Event: GSMRZ3
+On: 2011-10-17 16:44:58.409264 Event: Connected to Caller Handler
+On: 2011-10-17 16:45:08.409550 Event: 999 General Handler Error: Could not connect to Caller handler
+
+
+------------------STARTED THE LOGGING 2011-10-17 16:48:10.410129 ------------------
+On: 2011-10-17 16:48:10.410205 Event: init Caller
+On: 2011-10-17 16:48:10.410230 Event: GSMRZ3
+On: 2011-10-17 16:48:14.427666 Event: Connected to Caller Handler
+On: 2011-10-17 16:48:24.427924 Event: 999 General Handler Error: Could not connect to Caller handler
+
+
+------------------STARTED THE LOGGING 2011-10-17 16:48:49.228173 ------------------
+On: 2011-10-17 16:48:49.228257 Event: init Caller
+On: 2011-10-17 16:48:49.228282 Event: GSMRZ3
+On: 2011-10-17 16:48:53.234288 Event: Connected to Caller Handler
+On: 2011-10-17 16:49:03.234558 Event: 999 General Handler Error: Could not connect to Caller handler
+
+
+------------------STARTED THE LOGGING 2011-10-17 16:49:37.570318 ------------------
+On: 2011-10-17 16:49:37.570397 Event: init Caller
+On: 2011-10-17 16:49:37.570421 Event: GSMRZ3
+On: 2011-10-17 16:49:41.580286 Event: Connected to Caller Handler
+On: 2011-10-17 16:49:57.195888 Event: Caller Handler respond
+On: 2011-10-17 16:49:57.198409 Event: Caller handler : Ready
+On: 2011-10-17 16:49:57.198465 Event: init Receiver
+On: 2011-10-17 16:49:57.198487 Event: GSMRZ2
+On: 2011-10-17 16:50:01.205405 Event: Cannt connect to Receiver
+On: 2011-10-17 16:50:01.205501 Event: 998 General Handler Error: Could not connect Destination handler
+
+
+------------------STARTED THE LOGGING 2011-10-17 16:51:04.183314 ------------------
+On: 2011-10-17 16:51:04.183392 Event: init Caller
+On: 2011-10-17 16:51:04.183417 Event: GSMRZ3
+On: 2011-10-17 16:51:08.191088 Event: Connected to Caller Handler
+On: 2011-10-17 16:51:23.223439 Event: Caller Handler respond
+On: 2011-10-17 16:51:23.226115 Event: Caller handler : Ready
+On: 2011-10-17 16:51:23.226172 Event: init Receiver
+On: 2011-10-17 16:51:23.226195 Event: GSMRZ2
+On: 2011-10-17 16:51:27.233083 Event: Connected to Receiver Handler
+On: 2011-10-17 16:51:27.241166 Event: Receiver Handler respond
+On: 2011-10-17 16:51:27.243458 Event: Receiver handler : Ready
+On: 2011-10-17 16:51:27.243517 Event: Start Call
+On: 2011-10-17 16:51:27.243582 Event: Waiting Feedback
+On: 2011-10-17 16:51:32.898184 Event: Test Succeed
+
+
+------------------STARTED THE LOGGING 2011-10-17 16:52:08.654212 ------------------
+On: 2011-10-17 16:52:08.654292 Event: init Caller
+On: 2011-10-17 16:52:08.654314 Event: sip
+On: 2011-10-17 16:52:10.659451 Event: Connected to Caller Handler
+On: 2011-10-17 16:52:10.659743 Event: Caller Handler respond
+On: 2011-10-17 16:52:10.660896 Event: Caller handler : Ready
+On: 2011-10-17 16:52:10.660937 Event: init Receiver
+On: 2011-10-17 16:52:10.660958 Event: unisip
+On: 2011-10-17 16:52:12.666202 Event: Connected to Receiver Handler
+On: 2011-10-17 16:52:12.666493 Event: Receiver Handler respond
+On: 2011-10-17 16:52:12.667235 Event: Receiver handler : Ready
+On: 2011-10-17 16:52:12.667270 Event: Start Call
+On: 2011-10-17 16:52:12.667328 Event: Waiting Feedback
+On: 2011-10-17 16:52:16.721512 Event: Test Succeed
+
+
+------------------STARTED THE LOGGING 2011-10-17 17:15:25.589772 ------------------
+On: 2011-10-17 17:15:25.589897 Event: init Caller
+On: 2011-10-17 17:15:25.589923 Event: unisip
+On: 2011-10-17 17:15:27.595857 Event: Connected to Caller Handler
+On: 2011-10-17 17:15:27.596159 Event: Caller Handler respond
+On: 2011-10-17 17:15:27.596918 Event: Caller handler : Ready
+On: 2011-10-17 17:15:27.596958 Event: init Receiver
+On: 2011-10-17 17:15:27.596979 Event: GSMRZ1
+On: 2011-10-17 17:15:29.602415 Event: Connected to Receiver Handler
+On: 2011-10-17 17:15:29.602699 Event: Receiver Handler respond
+On: 2011-10-17 17:15:29.602883 Event: Receiver handler : Ready
+On: 2011-10-17 17:15:29.602912 Event: Start Call
+On: 2011-10-17 17:15:29.602966 Event: Waiting Feedback
+On: 2011-10-17 17:15:45.604178 Event: Test Failed
+On: 2011-10-17 17:15:49.680970 Event:
+On: 2011-10-17 17:15:49.681036 Event: init Caller
+On: 2011-10-17 17:15:49.681057 Event: GSMRZ2
+On: 2011-10-17 17:15:53.695287 Event: Connected to Caller Handler
+On: 2011-10-17 17:15:53.699782 Event: 999 General Handler Error: Could not connect to Caller handler
+On: 2011-10-17 17:15:57.773962 Event:
+On: 2011-10-17 17:15:57.774023 Event: init Caller
+On: 2011-10-17 17:15:57.774043 Event: landline
+On: 2011-10-17 17:15:59.777162 Event: Connected to Caller Handler
+On: 2011-10-17 17:15:59.777667 Event: Caller Handler respond
+On: 2011-10-17 17:15:59.780013 Event: Caller handler : Ready
+On: 2011-10-17 17:15:59.780053 Event: init Receiver
+On: 2011-10-17 17:15:59.780074 Event: GSMRZ3
+On: 2011-10-17 17:16:03.786126 Event: Cannt connect to Receiver
+On: 2011-10-17 17:16:03.786184 Event: 998 General Handler Error: Could not connect Destination handler
+On: 2011-10-17 17:16:07.830834 Event:
+On: 2011-10-17 17:16:07.830896 Event: init Caller
+On: 2011-10-17 17:16:07.830917 Event: sip
+On: 2011-10-17 17:16:09.834179 Event: Connected to Caller Handler
+On: 2011-10-17 17:16:09.834563 Event: Caller Handler respond
+On: 2011-10-17 17:16:09.835324 Event: Caller handler : Ready
+On: 2011-10-17 17:16:09.835364 Event: init Receiver
+On: 2011-10-17 17:16:09.835385 Event: GSMExt.Eplus
+On: 2011-10-17 17:16:11.840841 Event: Connected to Receiver Handler
+On: 2011-10-17 17:16:11.841123 Event: Receiver Handler respond
+On: 2011-10-17 17:16:11.841303 Event: Receiver handler : Ready
+On: 2011-10-17 17:16:11.841332 Event: Start Call
+On: 2011-10-17 17:16:11.841385 Event: Waiting Feedback
+On: 2011-10-17 17:16:42.842670 Event: Test Failed
+On: 2011-10-17 17:16:46.919361 Event:
+On: 2011-10-17 17:16:46.919423 Event: init Caller
+On: 2011-10-17 17:16:46.919444 Event: sip
+On: 2011-10-17 17:16:48.926147 Event: Connected to Caller Handler
+On: 2011-10-17 17:16:48.926525 Event: Caller Handler respond
+On: 2011-10-17 17:16:48.927611 Event: Caller handler : Ready
+On: 2011-10-17 17:16:48.927649 Event: init Receiver
+On: 2011-10-17 17:16:48.927671 Event: GSMExt.O2
+On: 2011-10-17 17:16:50.933036 Event: Connected to Receiver Handler
+On: 2011-10-17 17:16:50.933320 Event: Receiver Handler respond
+On: 2011-10-17 17:16:50.933683 Event: Receiver handler : Ready
+On: 2011-10-17 17:16:50.933721 Event: Start Call
+On: 2011-10-17 17:16:50.933793 Event: Waiting Feedback
+On: 2011-10-17 17:17:21.935053 Event: Test Failed
+On: 2011-10-17 17:17:26.013241 Event:
+On: 2011-10-17 17:17:26.013310 Event: init Caller
+On: 2011-10-17 17:17:26.013330 Event: sip
+On: 2011-10-17 17:17:28.024382 Event: Connected to Caller Handler
+On: 2011-10-17 17:17:28.024764 Event: Caller Handler respond
+On: 2011-10-17 17:17:28.025672 Event: Caller handler : Ready
+On: 2011-10-17 17:17:28.025719 Event: init Receiver
+On: 2011-10-17 17:17:28.025741 Event: GSMExt.Tm
+On: 2011-10-17 17:17:30.030374 Event: Connected to Receiver Handler
+On: 2011-10-17 17:17:30.030664 Event: Receiver Handler respond
+On: 2011-10-17 17:17:30.030850 Event: Receiver handler : Ready
+On: 2011-10-17 17:17:30.030879 Event: Start Call
+On: 2011-10-17 17:17:30.030931 Event: Waiting Feedback
+On: 2011-10-17 17:18:01.031504 Event: Test Failed
+On: 2011-10-17 17:18:05.108646 Event:
+On: 2011-10-17 17:18:05.108714 Event: init Caller
+On: 2011-10-17 17:18:05.108735 Event: sip
+On: 2011-10-17 17:18:07.121414 Event: Connected to Caller Handler
+On: 2011-10-17 17:18:07.122003 Event: Caller Handler respond
+On: 2011-10-17 17:18:07.122786 Event: Caller handler : Ready
+On: 2011-10-17 17:18:07.122820 Event: init Receiver
+On: 2011-10-17 17:18:07.122841 Event: GSMRZ1
+On: 2011-10-17 17:18:09.126369 Event: Connected to Receiver Handler
+On: 2011-10-17 17:18:09.126651 Event: Receiver Handler respond
+On: 2011-10-17 17:18:09.126834 Event: Receiver handler : Ready
+On: 2011-10-17 17:18:09.126863 Event: Start Call
+On: 2011-10-17 17:18:09.126916 Event: Waiting Feedback
+On: 2011-10-17 17:18:25.128118 Event: Test Failed
+On: 2011-10-17 17:18:29.202552 Event:
+On: 2011-10-17 17:18:29.202614 Event: init Caller
+On: 2011-10-17 17:18:29.202634 Event: sip
+On: 2011-10-17 17:18:31.216282 Event: Connected to Caller Handler
+On: 2011-10-17 17:18:31.216659 Event: Caller Handler respond
+On: 2011-10-17 17:18:31.217421 Event: Caller handler : Ready
+On: 2011-10-17 17:18:31.217649 Event: init Receiver
+On: 2011-10-17 17:18:31.217676 Event: GSMExt.Eplus
+On: 2011-10-17 17:18:33.222378 Event: Connected to Receiver Handler
+On: 2011-10-17 17:18:33.222654 Event: Receiver Handler respond
+On: 2011-10-17 17:18:33.222824 Event: Receiver handler : Ready
+On: 2011-10-17 17:18:33.222849 Event: Start Call
+On: 2011-10-17 17:18:33.222900 Event: Waiting Feedback
+On: 2011-10-17 17:19:04.224161 Event: Test Failed
+On: 2011-10-17 17:19:08.299142 Event:
+On: 2011-10-17 17:19:08.299205 Event: init Caller
+On: 2011-10-17 17:19:08.299225 Event: sip
+On: 2011-10-17 17:19:10.312789 Event: Connected to Caller Handler
+On: 2011-10-17 17:19:10.313172 Event: Caller Handler respond
+On: 2011-10-17 17:19:10.314186 Event: Caller handler : Ready
+On: 2011-10-17 17:19:10.314225 Event: init Receiver
+On: 2011-10-17 17:19:10.314246 Event: GSMExt.O2
+On: 2011-10-17 17:19:12.318371 Event: Connected to Receiver Handler
+On: 2011-10-17 17:19:12.318657 Event: Receiver Handler respond
+On: 2011-10-17 17:19:12.318841 Event: Receiver handler : Ready
+On: 2011-10-17 17:19:12.318869 Event: Start Call
+On: 2011-10-17 17:19:12.318923 Event: Waiting Feedback
+On: 2011-10-17 17:19:43.320220 Event: Test Failed
+On: 2011-10-17 17:19:47.393908 Event:
+On: 2011-10-17 17:19:47.393973 Event: init Caller
+On: 2011-10-17 17:19:47.393993 Event: sip
+On: 2011-10-17 17:19:49.403047 Event: Connected to Caller Handler
+On: 2011-10-17 17:19:49.403428 Event: Caller Handler respond
+On: 2011-10-17 17:19:49.404190 Event: Caller handler : Ready
+On: 2011-10-17 17:19:49.404229 Event: init Receiver
+On: 2011-10-17 17:19:49.404250 Event: GSMExt.Tm
+On: 2011-10-17 17:19:51.409645 Event: Connected to Receiver Handler
+On: 2011-10-17 17:19:51.409925 Event: Receiver Handler respond
+On: 2011-10-17 17:19:51.410101 Event: Receiver handler : Ready
+On: 2011-10-17 17:19:51.410129 Event: Start Call
+On: 2011-10-17 17:19:51.410181 Event: Waiting Feedback
+On: 2011-10-17 17:20:22.411434 Event: Test Failed
+On: 2011-10-17 17:20:26.505327 Event:
+On: 2011-10-17 17:20:26.505395 Event: init Caller
+On: 2011-10-17 17:20:26.505415 Event: sip
+On: 2011-10-17 17:20:28.515300 Event: Connected to Caller Handler
+On: 2011-10-17 17:20:28.515839 Event: Caller Handler respond
+On: 2011-10-17 17:20:28.516627 Event: Caller handler : Ready
+On: 2011-10-17 17:20:28.516665 Event: init Receiver
+On: 2011-10-17 17:20:28.516686 Event: GSMRZ1
+On: 2011-10-17 17:20:30.521681 Event: Connected to Receiver Handler
+On: 2011-10-17 17:20:30.522063 Event: Receiver Handler respond
+On: 2011-10-17 17:20:30.522278 Event: Receiver handler : Ready
+On: 2011-10-17 17:20:30.522309 Event: Start Call
+On: 2011-10-17 17:20:30.522364 Event: Waiting Feedback
+On: 2011-10-17 17:20:46.523584 Event: Test Failed
+On: 2011-10-17 17:20:50.607017 Event:
+On: 2011-10-17 17:20:50.607081 Event: init Caller
+On: 2011-10-17 17:20:50.607101 Event: sip
+On: 2011-10-17 17:20:52.620612 Event: Connected to Caller Handler
+On: 2011-10-17 17:20:52.620995 Event: Caller Handler respond
+On: 2011-10-17 17:20:52.622012 Event: Caller handler : Ready
+On: 2011-10-17 17:20:52.622051 Event: init Receiver
+On: 2011-10-17 17:20:52.622145 Event: GSMExt.Eplus
+On: 2011-10-17 17:20:54.626375 Event: Connected to Receiver Handler
+On: 2011-10-17 17:20:54.626657 Event: Receiver Handler respond
+On: 2011-10-17 17:20:54.626840 Event: Receiver handler : Ready
+On: 2011-10-17 17:20:54.626869 Event: Start Call
+On: 2011-10-17 17:20:54.626921 Event: Waiting Feedback
+On: 2011-10-17 17:21:10.628120 Event: Test Succeed
+On: 2011-10-17 17:21:14.702853 Event:
+On: 2011-10-17 17:21:14.702916 Event: init Caller
+On: 2011-10-17 17:21:14.702936 Event: sip
+On: 2011-10-17 17:21:16.709644 Event: Connected to Caller Handler
+On: 2011-10-17 17:21:16.709937 Event: Caller Handler respond
+On: 2011-10-17 17:21:16.710705 Event: Caller handler : Ready
+On: 2011-10-17 17:21:16.710744 Event: init Receiver
+On: 2011-10-17 17:21:16.710765 Event: GSMExt.O2
+On: 2011-10-17 17:21:18.714373 Event: Connected to Receiver Handler
+On: 2011-10-17 17:21:18.714652 Event: Receiver Handler respond
+On: 2011-10-17 17:21:18.714834 Event: Receiver handler : Ready
+On: 2011-10-17 17:21:18.714862 Event: Start Call
+On: 2011-10-17 17:21:18.714915 Event: Waiting Feedback
+On: 2011-10-17 17:21:39.762384 Event: Test Succeed
+On: 2011-10-17 17:21:43.838997 Event:
+On: 2011-10-17 17:21:43.839060 Event: init Caller
+On: 2011-10-17 17:21:43.839080 Event: sip
+On: 2011-10-17 17:21:45.845986 Event: Connected to Caller Handler
+On: 2011-10-17 17:21:45.846274 Event: Caller Handler respond
+On: 2011-10-17 17:21:45.847034 Event: Caller handler : Ready
+On: 2011-10-17 17:21:45.847072 Event: init Receiver
+On: 2011-10-17 17:21:45.847094 Event: GSMExt.Tm
+On: 2011-10-17 17:21:47.850361 Event: Connected to Receiver Handler
+On: 2011-10-17 17:21:47.850646 Event: Receiver Handler respond
+On: 2011-10-17 17:21:47.850826 Event: Receiver handler : Ready
+On: 2011-10-17 17:21:47.850854 Event: Start Call
+On: 2011-10-17 17:21:47.850906 Event: Waiting Feedback
+On: 2011-10-17 17:22:13.399854 Event: Test Succeed
+On: 2011-10-17 17:22:17.475578 Event:
+On: 2011-10-17 17:22:17.475640 Event: init Caller
+On: 2011-10-17 17:22:17.475661 Event: sip
+On: 2011-10-17 17:22:19.489196 Event: Connected to Caller Handler
+On: 2011-10-17 17:22:19.489890 Event: Caller Handler respond
+On: 2011-10-17 17:22:19.490706 Event: Caller handler : Ready
+On: 2011-10-17 17:22:19.490740 Event: init Receiver
+On: 2011-10-17 17:22:19.490761 Event: GSMRZ1
+On: 2011-10-17 17:22:21.494374 Event: Connected to Receiver Handler
+On: 2011-10-17 17:22:21.494661 Event: Receiver Handler respond
+On: 2011-10-17 17:22:21.494843 Event: Receiver handler : Ready
+On: 2011-10-17 17:22:21.494871 Event: Start Call
+On: 2011-10-17 17:22:21.494923 Event: Waiting Feedback
+On: 2011-10-17 17:22:37.496122 Event: Test Failed
+On: 2011-10-17 17:22:41.570898 Event:
+On: 2011-10-17 17:22:41.570959 Event: init Caller
+On: 2011-10-17 17:22:41.570979 Event: sip
+On: 2011-10-17 17:22:43.584368 Event: Connected to Caller Handler
+On: 2011-10-17 17:22:43.584748 Event: Caller Handler respond
+On: 2011-10-17 17:22:43.585677 Event: Caller handler : Ready
+On: 2011-10-17 17:22:43.585722 Event: init Receiver
+On: 2011-10-17 17:22:43.585743 Event: GSMRZ1
+On: 2011-10-17 17:22:45.590376 Event: Connected to Receiver Handler
+On: 2011-10-17 17:22:45.590658 Event: Receiver Handler respond
+On: 2011-10-17 17:22:45.590839 Event: Receiver handler : Ready
+On: 2011-10-17 17:22:45.590867 Event: Start Call
+On: 2011-10-17 17:22:45.590919 Event: Waiting Feedback
+On: 2011-10-17 17:23:01.592999 Event: Test Failed
+On: 2011-10-17 17:23:05.674865 Event:
+On: 2011-10-17 17:23:05.674926 Event: init Caller
+On: 2011-10-17 17:23:05.674946 Event: sip
+On: 2011-10-17 17:23:07.690367 Event: Connected to Caller Handler
+On: 2011-10-17 17:23:07.690661 Event: Caller Handler respond
+On: 2011-10-17 17:23:07.691428 Event: Caller handler : Ready
+On: 2011-10-17 17:23:07.691469 Event: init Receiver
+On: 2011-10-17 17:23:07.691490 Event: GSMRZ1
+On: 2011-10-17 17:23:09.701153 Event: Connected to Receiver Handler
+On: 2011-10-17 17:23:09.701481 Event: Receiver Handler respond
+On: 2011-10-17 17:23:09.701726 Event: Receiver handler : Ready
+On: 2011-10-17 17:23:09.701757 Event: Start Call
+On: 2011-10-17 17:23:09.705495 Event: Waiting Feedback
+On: 2011-10-17 17:23:25.706745 Event: Test Failed
+On: 2011-10-17 17:23:29.788115 Event:
+On: 2011-10-17 17:23:29.788178 Event: init Caller
+On: 2011-10-17 17:23:29.788198 Event: sip
+On: 2011-10-17 17:23:31.800904 Event: Connected to Caller Handler
+On: 2011-10-17 17:23:31.801282 Event: Caller Handler respond
+On: 2011-10-17 17:23:31.802111 Event: Caller handler : Ready
+On: 2011-10-17 17:23:31.802151 Event: init Receiver
+On: 2011-10-17 17:23:31.802172 Event: GSMRZ1
+On: 2011-10-17 17:23:33.806373 Event: Connected to Receiver Handler
+On: 2011-10-17 17:23:33.806668 Event: Receiver Handler respond
+On: 2011-10-17 17:23:33.806854 Event: Receiver handler : Ready
+On: 2011-10-17 17:23:33.806884 Event: Start Call
+On: 2011-10-17 17:23:33.806937 Event: Waiting Feedback
+On: 2011-10-17 17:23:49.808143 Event: Test Failed
+On: 2011-10-17 17:23:53.887408 Event:
+On: 2011-10-17 17:23:53.887472 Event: init Caller
+On: 2011-10-17 17:23:53.887492 Event: sip
+On: 2011-10-17 17:23:55.900143 Event: Connected to Caller Handler
+On: 2011-10-17 17:23:55.901807 Event: Caller Handler respond
+On: 2011-10-17 17:23:55.903157 Event: Caller handler : Ready
+On: 2011-10-17 17:23:55.903207 Event: init Receiver
+On: 2011-10-17 17:23:55.903229 Event: GSMRZ1
+On: 2011-10-17 17:23:57.912641 Event: Connected to Receiver Handler
+On: 2011-10-17 17:23:57.912933 Event: Receiver Handler respond
+On: 2011-10-17 17:23:57.913114 Event: Receiver handler : Ready
+On: 2011-10-17 17:23:57.913143 Event: Start Call
+On: 2011-10-17 17:23:57.913191 Event: Waiting Feedback
+
+
+------------------STARTED THE LOGGING 2011-10-17 17:29:39.036185 ------------------
+On: 2011-10-17 17:29:39.036262 Event: init Caller
+On: 2011-10-17 17:29:39.036286 Event: unisip
+On: 2011-10-17 17:29:41.041549 Event: Connected to Caller Handler
+On: 2011-10-17 17:29:41.041860 Event: Caller Handler respond
+On: 2011-10-17 17:29:41.042641 Event: Caller handler : Ready
+On: 2011-10-17 17:29:41.042683 Event: init Receiver
+On: 2011-10-17 17:29:41.042704 Event: GSMRZ3
+On: 2011-10-17 17:29:45.048097 Event: Connected to Receiver Handler
+On: 2011-10-17 17:29:59.201047 Event: 998 General Handler Error: Could not connect Destination handler
+On: 2011-10-17 17:30:03.245057 Event:
+On: 2011-10-17 17:30:03.245117 Event: init Caller
+On: 2011-10-17 17:30:03.245138 Event: GSMRZ1
+On: 2011-10-17 17:30:05.250265 Event: Connected to Caller Handler
+On: 2011-10-17 17:30:05.250542 Event: Caller Handler respond
+On: 2011-10-17 17:30:05.250731 Event: Caller handler : Ready
+On: 2011-10-17 17:30:05.250760 Event: init Receiver
+On: 2011-10-17 17:30:05.250779 Event: GSMRZ2
+On: 2011-10-17 17:30:09.257733 Event: Connected to Receiver Handler
+On: 2011-10-17 17:30:09.265349 Event: Receiver Handler respond
+On: 2011-10-17 17:30:09.267803 Event: Receiver handler : Ready
+On: 2011-10-17 17:30:09.267858 Event: Start Call
+On: 2011-10-17 17:30:09.271152 Event: Waiting Feedback
+On: 2011-10-17 17:30:14.288656 Event: Test Succeed
+On: 2011-10-17 17:30:18.336985 Event:
+On: 2011-10-17 17:30:18.337047 Event: init Caller
+On: 2011-10-17 17:30:18.337068 Event: landline
+On: 2011-10-17 17:30:20.342112 Event: Connected to Caller Handler
+On: 2011-10-17 17:30:20.342392 Event: Caller Handler respond
+On: 2011-10-17 17:30:20.345109 Event: Caller handler : Ready
+On: 2011-10-17 17:30:20.345157 Event: init Receiver
+On: 2011-10-17 17:30:20.345179 Event: GSMRZ2
+On: 2011-10-17 17:30:24.352333 Event: Connected to Receiver Handler
+On: 2011-10-17 17:30:24.359993 Event: Receiver Handler respond
+On: 2011-10-17 17:30:24.362190 Event: Receiver handler : Ready
+On: 2011-10-17 17:30:24.362246 Event: Start Call
+On: 2011-10-17 17:30:24.362314 Event: Waiting Feedback
+On: 2011-10-17 17:30:55.363621 Event: Test Failed
+On: 2011-10-17 17:30:59.408567 Event:
+On: 2011-10-17 17:30:59.408629 Event: init Caller
+On: 2011-10-17 17:30:59.408649 Event: sip
+On: 2011-10-17 17:31:01.412427 Event: Connected to Caller Handler
+On: 2011-10-17 17:31:01.412813 Event: Caller Handler respond
+On: 2011-10-17 17:31:01.414122 Event: Caller handler : Ready
+On: 2011-10-17 17:31:01.414159 Event: init Receiver
+On: 2011-10-17 17:31:01.414181 Event: GSMExt.Eplus
+On: 2011-10-17 17:31:03.418388 Event: Connected to Receiver Handler
+On: 2011-10-17 17:31:03.418672 Event: Receiver Handler respond
+On: 2011-10-17 17:31:03.418856 Event: Receiver handler : Ready
+On: 2011-10-17 17:31:03.418885 Event: Start Call
+On: 2011-10-17 17:31:03.418937 Event: Waiting Feedback
+On: 2011-10-17 17:31:19.420136 Event: Test Succeed
+On: 2011-10-17 17:31:23.494954 Event:
+On: 2011-10-17 17:31:23.495016 Event: init Caller
+On: 2011-10-17 17:31:23.495037 Event: sip
+On: 2011-10-17 17:31:25.499467 Event: Connected to Caller Handler
+On: 2011-10-17 17:31:25.499900 Event: Caller Handler respond
+On: 2011-10-17 17:31:25.501032 Event: Caller handler : Ready
+On: 2011-10-17 17:31:25.501068 Event: init Receiver
+On: 2011-10-17 17:31:25.501089 Event: GSMExt.O2
+On: 2011-10-17 17:31:27.505298 Event: Connected to Receiver Handler
+On: 2011-10-17 17:31:27.505657 Event: Receiver Handler respond
+On: 2011-10-17 17:31:27.505854 Event: Receiver handler : Ready
+On: 2011-10-17 17:31:27.505884 Event: Start Call
+On: 2011-10-17 17:31:27.505939 Event: Waiting Feedback
+On: 2011-10-17 17:31:43.507137 Event: Test Succeed
+On: 2011-10-17 17:31:47.582377 Event:
+On: 2011-10-17 17:31:47.582436 Event: init Caller
+On: 2011-10-17 17:31:47.582456 Event: sip
+On: 2011-10-17 17:31:49.588484 Event: Connected to Caller Handler
+On: 2011-10-17 17:31:49.588767 Event: Caller Handler respond
+On: 2011-10-17 17:31:49.589544 Event: Caller handler : Ready
+On: 2011-10-17 17:31:49.589583 Event: init Receiver
+On: 2011-10-17 17:31:49.589605 Event: GSMExt.Tm
+On: 2011-10-17 17:31:51.594367 Event: Connected to Receiver Handler
+On: 2011-10-17 17:31:51.594646 Event: Receiver Handler respond
+On: 2011-10-17 17:31:51.594827 Event: Receiver handler : Ready
+On: 2011-10-17 17:31:51.594856 Event: Start Call
+On: 2011-10-17 17:31:51.594908 Event: Waiting Feedback
+On: 2011-10-17 17:32:07.596104 Event: Test Succeed
+On: 2011-10-17 17:32:11.680685 Event:
+On: 2011-10-17 17:32:11.680747 Event: init Caller
+On: 2011-10-17 17:32:11.680768 Event: sip
+On: 2011-10-17 17:32:13.689883 Event: Connected to Caller Handler
+On: 2011-10-17 17:32:13.691059 Event: Caller Handler respond
+On: 2011-10-17 17:32:13.692193 Event: Caller handler : Ready
+On: 2011-10-17 17:32:13.692231 Event: init Receiver
+On: 2011-10-17 17:32:13.692252 Event: GSMExt.Voda
+On: 2011-10-17 17:32:15.697604 Event: Connected to Receiver Handler
+On: 2011-10-17 17:32:15.697885 Event: Receiver Handler respond
+On: 2011-10-17 17:32:15.698064 Event: Receiver handler : Ready
+On: 2011-10-17 17:32:15.698093 Event: Start Call
+On: 2011-10-17 17:32:15.698145 Event: Waiting Feedback
+On: 2011-10-17 17:32:31.699349 Event: Test Succeed
+
+
+------------------STARTED THE LOGGING 2011-10-17 17:34:04.965519 ------------------
+On: 2011-10-17 17:34:04.965594 Event: init Caller
+On: 2011-10-17 17:34:04.965619 Event: GSMRZ2
+On: 2011-10-17 17:34:08.979821 Event: Cannt connect to Caller
+On: 2011-10-17 17:34:08.979885 Event: 999 General Handler Error: Could not connect to Caller handler
+
+
+------------------STARTED THE LOGGING 2011-10-17 17:34:44.848377 ------------------
+On: 2011-10-17 17:34:44.848451 Event: init Caller
+On: 2011-10-17 17:34:44.848475 Event: GSMRZ2
+On: 2011-10-17 17:34:48.854335 Event: Connected to Caller Handler
+On: 2011-10-17 17:34:48.862558 Event: Caller Handler respond
+On: 2011-10-17 17:34:48.864893 Event: Caller handler : Ready
+On: 2011-10-17 17:34:48.864930 Event: init Receiver
+On: 2011-10-17 17:34:48.864952 Event: GSMRZ3
+On: 2011-10-17 17:34:52.870198 Event: Cannt connect to Receiver
+On: 2011-10-17 17:34:52.870256 Event: 998 General Handler Error: Could not connect Destination handler
+
+
+------------------STARTED THE LOGGING 2011-10-17 17:35:49.299897 ------------------
+On: 2011-10-17 17:35:49.299973 Event: init Caller
+On: 2011-10-17 17:35:49.299997 Event: GSMRZ3
+On: 2011-10-17 17:35:53.307046 Event: Connected to Caller Handler
+On: 2011-10-17 17:36:07.997804 Event: 999 General Handler Error: Could not connect to Caller handler
+
+
+------------------STARTED THE LOGGING 2011-10-17 17:37:01.681205 ------------------
+On: 2011-10-17 17:37:01.681281 Event: init Caller
+On: 2011-10-17 17:37:01.681306 Event: GSMRZ3
+On: 2011-10-17 17:37:05.688317 Event: Connected to Caller Handler
+On: 2011-10-17 17:37:20.876647 Event: Caller Handler respond
+On: 2011-10-17 17:37:20.879117 Event: Caller handler : Ready
+On: 2011-10-17 17:37:20.879175 Event: init Receiver
+On: 2011-10-17 17:37:20.879198 Event: GSMRZ2
+On: 2011-10-17 17:37:24.886061 Event: Connected to Receiver Handler
+On: 2011-10-17 17:37:24.893906 Event: Receiver Handler respond
+On: 2011-10-17 17:37:24.896102 Event: Receiver handler : Ready
+On: 2011-10-17 17:37:24.896138 Event: Start Call
+On: 2011-10-17 17:37:24.896196 Event: Waiting Feedback
+On: 2011-10-17 17:37:29.776641 Event: Test Succeed
+
+
+------------------STARTED THE LOGGING 2011-10-17 17:37:43.384054 ------------------
+On: 2011-10-17 17:37:43.384130 Event: init Caller
+On: 2011-10-17 17:37:43.384153 Event: unisip
+On: 2011-10-17 17:37:45.388176 Event: Connected to Caller Handler
+On: 2011-10-17 17:37:45.388483 Event: Caller Handler respond
+On: 2011-10-17 17:37:45.389818 Event: Caller handler : Ready
+On: 2011-10-17 17:37:45.389860 Event: init Receiver
+On: 2011-10-17 17:37:45.389881 Event: GSMRZ3
+On: 2011-10-17 17:37:49.396090 Event: Connected to Receiver Handler
+On: 2011-10-17 17:38:04.484216 Event: Receiver Handler respond
+On: 2011-10-17 17:38:04.487063 Event: Receiver handler : Ready
+On: 2011-10-17 17:38:04.487125 Event: Start Call
+On: 2011-10-17 17:38:04.487195 Event: Waiting Feedback
+On: 2011-10-17 17:38:20.488427 Event: Test Failed
+On: 2011-10-17 17:38:24.534457 Event:
+On: 2011-10-17 17:38:24.534518 Event: init Caller
+On: 2011-10-17 17:38:24.534537 Event: GSMRZ1
+On: 2011-10-17 17:38:26.538372 Event: Connected to Caller Handler
+On: 2011-10-17 17:38:26.538650 Event: Caller Handler respond
+On: 2011-10-17 17:38:26.538838 Event: Caller handler : Ready
+On: 2011-10-17 17:38:26.538868 Event: init Receiver
+On: 2011-10-17 17:38:26.538887 Event: GSMExt.Eplus
+On: 2011-10-17 17:38:28.543909 Event: Connected to Receiver Handler
+On: 2011-10-17 17:38:28.544182 Event: Receiver Handler respond
+On: 2011-10-17 17:38:28.544361 Event: Receiver handler : Ready
+On: 2011-10-17 17:38:28.544390 Event: Start Call
+On: 2011-10-17 17:38:28.544440 Event: Waiting Feedback
+On: 2011-10-17 17:38:44.545528 Event: Test Succeed
+On: 2011-10-17 17:38:48.617995 Event:
+On: 2011-10-17 17:38:48.618055 Event: init Caller
+On: 2011-10-17 17:38:48.618074 Event: landline
+On: 2011-10-17 17:38:50.624327 Event: Connected to Caller Handler
+On: 2011-10-17 17:38:50.624713 Event: Caller Handler respond
+On: 2011-10-17 17:38:50.627616 Event: Caller handler : Ready
+On: 2011-10-17 17:38:50.627656 Event: init Receiver
+On: 2011-10-17 17:38:50.627677 Event: GSMRZ2
+On: 2011-10-17 17:38:54.634015 Event: Connected to Receiver Handler
+On: 2011-10-17 17:38:54.641359 Event: Receiver Handler respond
+On: 2011-10-17 17:38:54.643488 Event: Receiver handler : Ready
+On: 2011-10-17 17:38:54.643524 Event: Start Call
+On: 2011-10-17 17:38:54.643583 Event: Waiting Feedback
+On: 2011-10-17 17:39:25.644868 Event: Test Failed
+On: 2011-10-17 17:39:29.688912 Event:
+On: 2011-10-17 17:39:29.688970 Event: init Caller
+On: 2011-10-17 17:39:29.688989 Event: sip
+On: 2011-10-17 17:39:31.693786 Event: Connected to Caller Handler
+On: 2011-10-17 17:39:31.694173 Event: Caller Handler respond
+On: 2011-10-17 17:39:31.694947 Event: Caller handler : Ready
+On: 2011-10-17 17:39:31.694984 Event: init Receiver
+On: 2011-10-17 17:39:31.695005 Event: GSMExt.O2
+On: 2011-10-17 17:39:33.698346 Event: Connected to Receiver Handler
+On: 2011-10-17 17:39:33.698632 Event: Receiver Handler respond
+On: 2011-10-17 17:39:33.698818 Event: Receiver handler : Ready
+On: 2011-10-17 17:39:33.698847 Event: Start Call
+On: 2011-10-17 17:39:33.698900 Event: Waiting Feedback
+On: 2011-10-17 17:39:49.700095 Event: Test Succeed
+On: 2011-10-17 17:39:53.782355 Event:
+On: 2011-10-17 17:39:53.782415 Event: init Caller
+On: 2011-10-17 17:39:53.782435 Event: sip
+On: 2011-10-17 17:39:55.792350 Event: Connected to Caller Handler
+On: 2011-10-17 17:39:55.792739 Event: Caller Handler respond
+On: 2011-10-17 17:39:55.794055 Event: Caller handler : Ready
+On: 2011-10-17 17:39:55.794093 Event: init Receiver
+On: 2011-10-17 17:39:55.794114 Event: GSMExt.Tm
+On: 2011-10-17 17:39:57.798325 Event: Connected to Receiver Handler
+On: 2011-10-17 17:39:57.798600 Event: Receiver Handler respond
+On: 2011-10-17 17:39:57.798779 Event: Receiver handler : Ready
+On: 2011-10-17 17:39:57.798807 Event: Start Call
+On: 2011-10-17 17:39:57.798859 Event: Waiting Feedback
+On: 2011-10-17 17:40:13.800055 Event: Test Succeed
+On: 2011-10-17 17:40:17.876082 Event:
+On: 2011-10-17 17:40:17.876141 Event: init Caller
+On: 2011-10-17 17:40:17.876160 Event: sip
+On: 2011-10-17 17:40:19.882163 Event: Connected to Caller Handler
+On: 2011-10-17 17:40:19.882544 Event: Caller Handler respond
+On: 2011-10-17 17:40:19.883552 Event: Caller handler : Ready
+On: 2011-10-17 17:40:19.883588 Event: init Receiver
+On: 2011-10-17 17:40:19.883608 Event: GSMExt.Voda
+On: 2011-10-17 17:40:21.888885 Event: Connected to Receiver Handler
+On: 2011-10-17 17:40:21.889167 Event: Receiver Handler respond
+On: 2011-10-17 17:40:21.889351 Event: Receiver handler : Ready
+On: 2011-10-17 17:40:21.889379 Event: Start Call
+On: 2011-10-17 17:40:21.889431 Event: Waiting Feedback
+On: 2011-10-17 17:40:37.890662 Event: Test Succeed
+On: 2011-10-17 17:40:41.948816 Event:
+On: 2011-10-17 17:40:41.948876 Event: init Caller
+On: 2011-10-17 17:40:41.948896 Event: sip
+On: 2011-10-17 17:40:43.966734 Event: Connected to Caller Handler
+On: 2011-10-17 17:40:43.973389 Event: Caller Handler respond
+On: 2011-10-17 17:40:43.976166 Event: Caller handler : Ready
+On: 2011-10-17 17:40:43.976209 Event: init Receiver
+On: 2011-10-17 17:40:43.976231 Event: GSMRZ3
+On: 2011-10-17 17:40:47.983357 Event: Cannt connect to Receiver
+On: 2011-10-17 17:40:47.983415 Event: 998 General Handler Error: Could not connect Destination handler
+On: 2011-10-17 17:40:52.021055 Event:
+On: 2011-10-17 17:40:52.021115 Event: init Caller
+On: 2011-10-17 17:40:52.021135 Event: sip
+On: 2011-10-17 17:40:54.026116 Event: Connected to Caller Handler
+On: 2011-10-17 17:40:54.026412 Event: Caller Handler respond
+On: 2011-10-17 17:40:54.027182 Event: Caller handler : Ready
+On: 2011-10-17 17:40:54.027221 Event: init Receiver
+On: 2011-10-17 17:40:54.027242 Event: GSMRZ2
+On: 2011-10-17 17:40:58.034011 Event: Connected to Receiver Handler
+On: 2011-10-17 17:40:58.041855 Event: Receiver Handler respond
+On: 2011-10-17 17:40:58.044373 Event: Receiver handler : Ready
+On: 2011-10-17 17:40:58.044436 Event: Start Call
+On: 2011-10-17 17:40:58.044508 Event: Waiting Feedback
+On: 2011-10-17 17:41:14.045737 Event: Test Failed
+
+
+------------------STARTED THE LOGGING 2011-10-17 17:46:33.306639 ------------------
+On: 2011-10-17 17:46:33.306715 Event: init Caller
+On: 2011-10-17 17:46:33.306738 Event: unisip
+On: 2011-10-17 17:46:35.311490 Event: Connected to Caller Handler
+On: 2011-10-17 17:46:35.311803 Event: Caller Handler respond
+On: 2011-10-17 17:46:35.312569 Event: Caller handler : Ready
+On: 2011-10-17 17:46:35.312609 Event: init Receiver
+On: 2011-10-17 17:46:35.312630 Event: GSMRZ2
+On: 2011-10-17 17:46:39.319844 Event: Cannt connect to Receiver
+On: 2011-10-17 17:46:39.319910 Event: 998 General Handler Error: Could not connect Destination handler
+On: 2011-10-17 17:46:43.367006 Event:
+On: 2011-10-17 17:46:43.367067 Event: init Caller
+On: 2011-10-17 17:46:43.367086 Event: GSMRZ1
+On: 2011-10-17 17:46:45.372079 Event: Connected to Caller Handler
+On: 2011-10-17 17:46:45.372351 Event: Caller Handler respond
+On: 2011-10-17 17:46:45.372537 Event: Caller handler : Ready
+On: 2011-10-17 17:46:45.372567 Event: init Receiver
+On: 2011-10-17 17:46:45.372585 Event: GSMExt.O2
+On: 2011-10-17 17:46:47.377890 Event: Connected to Receiver Handler
+On: 2011-10-17 17:46:47.378158 Event: Receiver Handler respond
+On: 2011-10-17 17:46:47.378329 Event: Receiver handler : Ready
+On: 2011-10-17 17:46:47.378354 Event: Start Call
+On: 2011-10-17 17:46:47.381631 Event: Waiting Feedback
+On: 2011-10-17 17:47:03.382908 Event: Test Succeed
+On: 2011-10-17 17:47:07.459832 Event:
+On: 2011-10-17 17:47:07.459894 Event: init Caller
+On: 2011-10-17 17:47:07.459912 Event: landline
+On: 2011-10-17 17:47:09.463624 Event: Connected to Caller Handler
+On: 2011-10-17 17:47:09.463913 Event: Caller Handler respond
+On: 2011-10-17 17:47:09.466744 Event: Caller handler : Ready
+On: 2011-10-17 17:47:09.466783 Event: init Receiver
+On: 2011-10-17 17:47:09.466804 Event: GSMRZ3
+On: 2011-10-17 17:47:13.472162 Event: Cannt connect to Receiver
+On: 2011-10-17 17:47:13.472220 Event: 998 General Handler Error: Could not connect Destination handler
+On: 2011-10-17 17:47:17.516853 Event:
+On: 2011-10-17 17:47:17.516913 Event: init Caller
+On: 2011-10-17 17:47:17.516932 Event: sip
+On: 2011-10-17 17:47:19.521742 Event: Connected to Caller Handler
+On: 2011-10-17 17:47:19.522118 Event: Caller Handler respond
+On: 2011-10-17 17:47:19.522884 Event: Caller handler : Ready
+On: 2011-10-17 17:47:19.522922 Event: init Receiver
+On: 2011-10-17 17:47:19.522943 Event: GSMExt.Eplus
+On: 2011-10-17 17:47:21.526386 Event: Connected to Receiver Handler
+On: 2011-10-17 17:47:21.526669 Event: Receiver Handler respond
+On: 2011-10-17 17:47:21.526855 Event: Receiver handler : Ready
+On: 2011-10-17 17:47:21.526886 Event: Start Call
+On: 2011-10-17 17:47:21.526939 Event: Waiting Feedback
+On: 2011-10-17 17:47:37.528154 Event: Test Succeed
+On: 2011-10-17 17:47:41.606714 Event:
+On: 2011-10-17 17:47:41.606775 Event: init Caller
+On: 2011-10-17 17:47:41.606794 Event: sip
+On: 2011-10-17 17:47:43.616338 Event: Connected to Caller Handler
+On: 2011-10-17 17:47:43.616721 Event: Caller Handler respond
+On: 2011-10-17 17:47:43.617518 Event: Caller handler : Ready
+On: 2011-10-17 17:47:43.617556 Event: init Receiver
+On: 2011-10-17 17:47:43.617576 Event: GSMExt.Tm
+On: 2011-10-17 17:47:45.621678 Event: Connected to Receiver Handler
+On: 2011-10-17 17:47:45.622059 Event: Receiver Handler respond
+On: 2011-10-17 17:47:45.622269 Event: Receiver handler : Ready
+On: 2011-10-17 17:47:45.622300 Event: Start Call
+On: 2011-10-17 17:47:45.622352 Event: Waiting Feedback
+On: 2011-10-17 17:48:01.623549 Event: Test Succeed
+On: 2011-10-17 17:48:05.702525 Event:
+On: 2011-10-17 17:48:05.702587 Event: init Caller
+On: 2011-10-17 17:48:05.702606 Event: sip
+On: 2011-10-17 17:48:07.716105 Event: Connected to Caller Handler
+On: 2011-10-17 17:48:07.716491 Event: Caller Handler respond
+On: 2011-10-17 17:48:07.717263 Event: Caller handler : Ready
+On: 2011-10-17 17:48:07.717303 Event: init Receiver
+On: 2011-10-17 17:48:07.717324 Event: GSMExt.Voda
+On: 2011-10-17 17:48:09.722372 Event: Connected to Receiver Handler
+On: 2011-10-17 17:48:09.722648 Event: Receiver Handler respond
+On: 2011-10-17 17:48:09.722825 Event: Receiver handler : Ready
+On: 2011-10-17 17:48:09.722923 Event: Start Call
+On: 2011-10-17 17:48:09.722985 Event: Waiting Feedback
+On: 2011-10-17 17:48:25.724184 Event: Test Succeed
+
+
+------------------STARTED THE LOGGING 2011-10-17 17:49:22.918141 ------------------
+On: 2011-10-17 17:49:22.918217 Event: init Caller
+On: 2011-10-17 17:49:22.918241 Event: GSMRZ3
+On: 2011-10-17 17:49:26.934281 Event: Connected to Caller Handler
+On: 2011-10-17 17:49:41.715352 Event: Caller Handler respond
+On: 2011-10-17 17:49:41.718906 Event: Caller handler : Ready
+On: 2011-10-17 17:49:41.718967 Event: init Receiver
+On: 2011-10-17 17:49:41.718989 Event: GSMRZ2
+On: 2011-10-17 17:49:45.725756 Event: Connected to Receiver Handler
+On: 2011-10-17 17:49:45.732940 Event: Receiver Handler respond
+On: 2011-10-17 17:49:45.735046 Event: Receiver handler : Ready
+On: 2011-10-17 17:49:45.735081 Event: Start Call
+On: 2011-10-17 17:49:45.735140 Event: Waiting Feedback
+On: 2011-10-17 17:49:51.254447 Event: Test Succeed
+
+
+------------------STARTED THE LOGGING 2011-10-17 17:51:25.870380 ------------------
+On: 2011-10-17 17:51:25.870456 Event: init Caller
+On: 2011-10-17 17:51:25.870481 Event: landline
+On: 2011-10-17 17:51:27.877131 Event: Connected to Caller Handler
+On: 2011-10-17 17:51:27.877480 Event: Caller Handler respond
+On: 2011-10-17 17:51:27.880646 Event: Caller handler : Ready
+On: 2011-10-17 17:51:27.880688 Event: init Receiver
+On: 2011-10-17 17:51:27.880709 Event: GSMRZ2
+On: 2011-10-17 17:51:31.886036 Event: Connected to Receiver Handler
+On: 2011-10-17 17:51:31.893283 Event: Receiver Handler respond
+On: 2011-10-17 17:51:31.895424 Event: Receiver handler : Ready
+On: 2011-10-17 17:51:31.895461 Event: Start Call
+On: 2011-10-17 17:51:31.895517 Event: Waiting Feedback
+On: 2011-10-17 17:52:02.896837 Event: Test Failed
+
+
+------------------STARTED THE LOGGING 2011-10-17 17:55:52.649188 ------------------
+On: 2011-10-17 17:55:52.649262 Event: init Caller
+On: 2011-10-17 17:55:52.649286 Event: GSMRZ3
+On: 2011-10-17 17:55:56.654377 Event: Cannt connect to Caller
+On: 2011-10-17 17:55:56.654450 Event: 999 General Handler Error: Could not connect to Caller handler
+
+
+------------------STARTED THE LOGGING 2011-10-17 17:57:31.515671 ------------------
+On: 2011-10-17 17:57:31.515745 Event: init Caller
+On: 2011-10-17 17:57:31.515769 Event: GSMRZ3
+On: 2011-10-17 17:57:35.522776 Event: Connected to Caller Handler
+On: 2011-10-17 17:57:50.062351 Event: Caller Handler respond
+On: 2011-10-17 17:57:50.065820 Event: Caller handler : Ready
+On: 2011-10-17 17:57:50.065881 Event: init Receiver
+On: 2011-10-17 17:57:50.065903 Event: GSMRZ2
+On: 2011-10-17 17:57:54.072665 Event: Connected to Receiver Handler
+On: 2011-10-17 17:57:54.080634 Event: Receiver Handler respond
+On: 2011-10-17 17:57:54.082895 Event: Receiver handler : Ready
+On: 2011-10-17 17:57:54.082953 Event: Start Call
+On: 2011-10-17 17:57:54.083018 Event: Waiting Feedback
+On: 2011-10-17 17:57:59.721769 Event: Test Succeed
+
+
+------------------STARTED THE LOGGING 2011-10-17 17:59:06.264556 ------------------
+On: 2011-10-17 17:59:06.264629 Event: init Caller
+On: 2011-10-17 17:59:06.264654 Event: GSMRZ3
+On: 2011-10-17 17:59:10.271644 Event: Connected to Caller Handler
+On: 2011-10-17 17:59:24.854704 Event: Caller Handler respond
+On: 2011-10-17 17:59:24.857634 Event: Caller handler : Ready
+On: 2011-10-17 17:59:24.857697 Event: init Receiver
+On: 2011-10-17 17:59:24.857719 Event: GSMRZ2
+On: 2011-10-17 17:59:28.864051 Event: Connected to Receiver Handler
+On: 2011-10-17 17:59:28.871288 Event: Receiver Handler respond
+On: 2011-10-17 17:59:28.874050 Event: Receiver handler : Ready
+On: 2011-10-17 17:59:28.874111 Event: Start Call
+On: 2011-10-17 17:59:28.874180 Event: Waiting Feedback
+On: 2011-10-17 17:59:35.077711 Event: Test Succeed
+
+
+------------------STARTED THE LOGGING 2011-10-17 18:02:38.505702 ------------------
+On: 2011-10-17 18:02:38.505815 Event: init Caller
+On: 2011-10-17 18:02:38.505841 Event: unisip
+On: 2011-10-17 18:02:40.511049 Event: Connected to Caller Handler
+On: 2011-10-17 18:02:40.511358 Event: Caller Handler respond
+On: 2011-10-17 18:02:40.512131 Event: Caller handler : Ready
+On: 2011-10-17 18:02:40.512173 Event: init Receiver
+On: 2011-10-17 18:02:40.512194 Event: GSMRZ1
+On: 2011-10-17 18:02:42.517506 Event: Connected to Receiver Handler
+On: 2011-10-17 18:02:42.517959 Event: Receiver Handler respond
+On: 2011-10-17 18:02:42.518196 Event: Receiver handler : Ready
+On: 2011-10-17 18:02:42.518228 Event: Start Call
+On: 2011-10-17 18:02:42.518285 Event: Waiting Feedback
+On: 2011-10-17 18:02:58.519485 Event: Test Failed
+On: 2011-10-17 18:03:02.599558 Event:
+On: 2011-10-17 18:03:02.599619 Event: init Caller
+On: 2011-10-17 18:03:02.599639 Event: GSMRZ2
+On: 2011-10-17 18:03:06.615451 Event: Cannt connect to Caller
+On: 2011-10-17 18:03:06.615511 Event: 999 General Handler Error: Could not connect to Caller handler
+On: 2011-10-17 18:03:10.661988 Event:
+On: 2011-10-17 18:03:10.662050 Event: init Caller
+On: 2011-10-17 18:03:10.662070 Event: landline
+On: 2011-10-17 18:03:12.666764 Event: Connected to Caller Handler
+On: 2011-10-17 18:03:12.667150 Event: Caller Handler respond
+On: 2011-10-17 18:03:12.669833 Event: Caller handler : Ready
+On: 2011-10-17 18:03:12.669872 Event: init Receiver
+On: 2011-10-17 18:03:12.669894 Event: GSMRZ3
+On: 2011-10-17 18:03:16.676147 Event: Cannt connect to Receiver
+On: 2011-10-17 18:03:16.676220 Event: 998 General Handler Error: Could not connect Destination handler
+On: 2011-10-17 18:03:20.722873 Event:
+On: 2011-10-17 18:03:20.722933 Event: init Caller
+On: 2011-10-17 18:03:20.722953 Event: sip
+On: 2011-10-17 18:03:22.726275 Event: Connected to Caller Handler
+On: 2011-10-17 18:03:22.726572 Event: Caller Handler respond
+On: 2011-10-17 18:03:22.727699 Event: Caller handler : Ready
+On: 2011-10-17 18:03:22.727736 Event: init Receiver
+On: 2011-10-17 18:03:22.727757 Event: GSMExt.O2
+On: 2011-10-17 18:03:24.733008 Event: Connected to Receiver Handler
+On: 2011-10-17 18:03:24.733289 Event: Receiver Handler respond
+On: 2011-10-17 18:03:24.733530 Event: Receiver handler : Ready
+On: 2011-10-17 18:03:24.733561 Event: Start Call
+On: 2011-10-17 18:03:24.733617 Event: Waiting Feedback
+On: 2011-10-17 18:03:40.734819 Event: Test Succeed
+On: 2011-10-17 18:03:44.811076 Event:
+On: 2011-10-17 18:03:44.811138 Event: init Caller
+On: 2011-10-17 18:03:44.811158 Event: sip
+On: 2011-10-17 18:03:46.818847 Event: Connected to Caller Handler
+On: 2011-10-17 18:03:46.819238 Event: Caller Handler respond
+On: 2011-10-17 18:03:46.820014 Event: Caller handler : Ready
+On: 2011-10-17 18:03:46.820053 Event: init Receiver
+On: 2011-10-17 18:03:46.820074 Event: GSMExt.Tm
+On: 2011-10-17 18:03:48.823742 Event: Connected to Receiver Handler
+On: 2011-10-17 18:03:48.824191 Event: Receiver Handler respond
+On: 2011-10-17 18:03:48.824408 Event: Receiver handler : Ready
+On: 2011-10-17 18:03:48.824438 Event: Start Call
+On: 2011-10-17 18:03:48.824491 Event: Waiting Feedback
+On: 2011-10-17 18:04:04.825523 Event: Test Succeed
+On: 2011-10-17 18:04:08.906640 Event:
+On: 2011-10-17 18:04:08.906704 Event: init Caller
+On: 2011-10-17 18:04:08.906724 Event: sip
+On: 2011-10-17 18:04:10.920161 Event: Connected to Caller Handler
+On: 2011-10-17 18:04:10.920546 Event: Caller Handler respond
+On: 2011-10-17 18:04:10.921317 Event: Caller handler : Ready
+On: 2011-10-17 18:04:10.921355 Event: init Receiver
+On: 2011-10-17 18:04:10.921377 Event: GSMExt.Voda
+On: 2011-10-17 18:04:12.926352 Event: Connected to Receiver Handler
+On: 2011-10-17 18:04:12.926623 Event: Receiver Handler respond
+On: 2011-10-17 18:04:12.926813 Event: Receiver handler : Ready
+On: 2011-10-17 18:04:12.926843 Event: Start Call
+On: 2011-10-17 18:04:12.926896 Event: Waiting Feedback
+On: 2011-10-17 18:04:28.928092 Event: Test Succeed
+On: 2011-10-17 18:04:33.006339 Event:
+On: 2011-10-17 18:04:33.006401 Event: init Caller
+On: 2011-10-17 18:04:33.006421 Event: sip
+On: 2011-10-17 18:04:35.013761 Event: Connected to Caller Handler
+On: 2011-10-17 18:04:35.014152 Event: Caller Handler respond
+On: 2011-10-17 18:04:35.015239 Event: Caller handler : Ready
+On: 2011-10-17 18:04:35.015278 Event: init Receiver
+On: 2011-10-17 18:04:35.015300 Event: GSMRZ1
+On: 2011-10-17 18:04:37.020597 Event: Connected to Receiver Handler
+On: 2011-10-17 18:04:37.020878 Event: Receiver Handler respond
+On: 2011-10-17 18:04:37.021053 Event: Receiver handler : Ready
+On: 2011-10-17 18:04:37.021078 Event: Start Call
+On: 2011-10-17 18:04:37.021130 Event: Waiting Feedback
+On: 2011-10-17 18:04:53.021520 Event: Test Failed
+
+
+------------------STARTED THE LOGGING 2011-10-17 18:09:36.505211 ------------------
+On: 2011-10-17 18:09:36.505289 Event: init Caller
+On: 2011-10-17 18:09:36.505313 Event: unisip
+On: 2011-10-17 18:09:38.514003 Event: Connected to Caller Handler
+On: 2011-10-17 18:09:38.514302 Event: Caller Handler respond
+On: 2011-10-17 18:09:38.515067 Event: Caller handler : Ready
+On: 2011-10-17 18:09:38.515107 Event: init Receiver
+On: 2011-10-17 18:09:38.515129 Event: GSMRZ2
+On: 2011-10-17 18:09:42.522173 Event: Cannt connect to Receiver
+On: 2011-10-17 18:09:42.522242 Event: 998 General Handler Error: Could not connect Destination handler
+On: 2011-10-17 18:09:46.570654 Event:
+On: 2011-10-17 18:09:46.570718 Event: init Caller
+On: 2011-10-17 18:09:46.570739 Event: GSMRZ1
+On: 2011-10-17 18:09:48.575797 Event: Connected to Caller Handler
+On: 2011-10-17 18:09:48.576076 Event: Caller Handler respond
+On: 2011-10-17 18:09:48.576266 Event: Caller handler : Ready
+On: 2011-10-17 18:09:48.576296 Event: init Receiver
+On: 2011-10-17 18:09:48.576316 Event: GSMExt.Tm
+On: 2011-10-17 18:09:50.581743 Event: Connected to Receiver Handler
+On: 2011-10-17 18:09:50.582025 Event: Receiver Handler respond
+On: 2011-10-17 18:09:50.582206 Event: Receiver handler : Ready
+On: 2011-10-17 18:09:50.582235 Event: Start Call
+On: 2011-10-17 18:09:50.589601 Event: Waiting Feedback
+On: 2011-10-17 18:10:06.590855 Event: Test Succeed
+On: 2011-10-17 18:10:10.671021 Event:
+On: 2011-10-17 18:10:10.671082 Event: init Caller
+On: 2011-10-17 18:10:10.671102 Event: landline
+On: 2011-10-17 18:10:12.675892 Event: Connected to Caller Handler
+On: 2011-10-17 18:10:12.676185 Event: Caller Handler respond
+On: 2011-10-17 18:10:17.678678 Event: Caller handler : Ready
+On: 2011-10-17 18:10:17.678715 Event: init Receiver
+On: 2011-10-17 18:10:17.678738 Event: GSMRZ3
+On: 2011-10-17 18:10:21.684144 Event: Cannt connect to Receiver
+On: 2011-10-17 18:10:21.684204 Event: 998 General Handler Error: Could not connect Destination handler
+On: 2011-10-17 18:10:25.727193 Event:
+On: 2011-10-17 18:10:25.727252 Event: init Caller
+On: 2011-10-17 18:10:25.727273 Event: sip
+On: 2011-10-17 18:10:27.730129 Event: Connected to Caller Handler
+On: 2011-10-17 18:10:27.730519 Event: Caller Handler respond
+On: 2011-10-17 18:10:27.731296 Event: Caller handler : Ready
+On: 2011-10-17 18:10:27.731336 Event: init Receiver
+On: 2011-10-17 18:10:27.731358 Event: GSMExt.Eplus
+On: 2011-10-17 18:10:29.736734 Event: Connected to Receiver Handler
+On: 2011-10-17 18:10:29.737003 Event: Receiver Handler respond
+On: 2011-10-17 18:10:29.737172 Event: Receiver handler : Ready
+On: 2011-10-17 18:10:29.737198 Event: Start Call
+On: 2011-10-17 18:10:29.737249 Event: Waiting Feedback
+On: 2011-10-17 18:10:45.737518 Event: Test Succeed
+On: 2011-10-17 18:10:49.818799 Event:
+On: 2011-10-17 18:10:49.818860 Event: init Caller
+On: 2011-10-17 18:10:49.818881 Event: sip
+On: 2011-10-17 18:10:51.826154 Event: Connected to Caller Handler
+On: 2011-10-17 18:10:51.826484 Event: Caller Handler respond
+On: 2011-10-17 18:10:51.827271 Event: Caller handler : Ready
+On: 2011-10-17 18:10:51.827309 Event: init Receiver
+On: 2011-10-17 18:10:51.827331 Event: GSMExt.O2
+On: 2011-10-17 18:10:53.833057 Event: Connected to Receiver Handler
+On: 2011-10-17 18:10:53.833339 Event: Receiver Handler respond
+On: 2011-10-17 18:10:53.833710 Event: Receiver handler : Ready
+On: 2011-10-17 18:10:53.833750 Event: Start Call
+On: 2011-10-17 18:10:53.833821 Event: Waiting Feedback
+On: 2011-10-17 18:11:09.835025 Event: Test Succeed
+On: 2011-10-17 18:11:13.917329 Event:
+On: 2011-10-17 18:11:13.917392 Event: init Caller
+On: 2011-10-17 18:11:13.917412 Event: sip
+On: 2011-10-17 18:11:15.926637 Event: Connected to Caller Handler
+On: 2011-10-17 18:11:15.927023 Event: Caller Handler respond
+On: 2011-10-17 18:11:15.927795 Event: Caller handler : Ready
+On: 2011-10-17 18:11:15.927832 Event: init Receiver
+On: 2011-10-17 18:11:15.927853 Event: GSMExt.Voda
+On: 2011-10-17 18:11:17.933690 Event: Connected to Receiver Handler
+On: 2011-10-17 18:11:17.933969 Event: Receiver Handler respond
+On: 2011-10-17 18:11:17.934149 Event: Receiver handler : Ready
+On: 2011-10-17 18:11:17.934250 Event: Start Call
+On: 2011-10-17 18:11:17.934315 Event: Waiting Feedback
+On: 2011-10-17 18:11:33.935518 Event: Test Succeed
+
+
+------------------STARTED THE LOGGING 2011-10-17 18:12:51.536558 ------------------
+On: 2011-10-17 18:12:51.536634 Event: init Caller
+On: 2011-10-17 18:12:51.536658 Event: GSMRZ3
+On: 2011-10-17 18:12:55.543702 Event: Connected to Caller Handler
+On: 2011-10-17 18:13:10.319172 Event: Caller Handler respond
+On: 2011-10-17 18:13:10.336841 Event: Caller handler : Ready
+On: 2011-10-17 18:13:10.336881 Event: init Receiver
+On: 2011-10-17 18:13:10.336901 Event: GSMRZ2
+On: 2011-10-17 18:13:14.343738 Event: Connected to Receiver Handler
+On: 2011-10-17 18:13:14.364727 Event: Receiver Handler respond
+On: 2011-10-17 18:13:14.375970 Event: Receiver handler : Ready
+On: 2011-10-17 18:13:14.376007 Event: Start Call
+On: 2011-10-17 18:13:14.376065 Event: Waiting Feedback
+On: 2011-10-17 18:13:20.036057 Event: Test Succeed
+
+
+------------------STARTED THE LOGGING 2011-10-17 18:13:44.510138 ------------------
+On: 2011-10-17 18:13:44.510217 Event: init Caller
+On: 2011-10-17 18:13:44.510242 Event: GSMRZ3
+On: 2011-10-17 18:13:48.517301 Event: Connected to Caller Handler
+On: 2011-10-17 18:14:03.350268 Event: Caller Handler respond
+On: 2011-10-17 18:14:03.366371 Event: Caller handler : Ready
+On: 2011-10-17 18:14:03.366414 Event: init Receiver
+On: 2011-10-17 18:14:03.366436 Event: GSMRZ1
+On: 2011-10-17 18:14:05.370410 Event: Connected to Receiver Handler
+On: 2011-10-17 18:14:05.370690 Event: Receiver Handler respond
+On: 2011-10-17 18:14:05.370871 Event: Receiver handler : Ready
+On: 2011-10-17 18:14:05.370900 Event: Start Call
+On: 2011-10-17 18:14:05.373709 Event: Waiting Feedback
+On: 2011-10-17 18:14:10.942099 Event: Test Succeed
+
+
+------------------STARTED THE LOGGING 2011-10-17 18:14:29.904126 ------------------
+On: 2011-10-17 18:14:29.904202 Event: init Caller
+On: 2011-10-17 18:14:29.904228 Event: GSMRZ1
+On: 2011-10-17 18:14:31.909520 Event: Connected to Caller Handler
+On: 2011-10-17 18:14:31.909986 Event: Caller Handler respond
+On: 2011-10-17 18:14:31.910227 Event: Caller handler : Ready
+On: 2011-10-17 18:14:31.910258 Event: init Receiver
+On: 2011-10-17 18:14:31.910278 Event: GSMRZ3
+On: 2011-10-17 18:14:35.917099 Event: Connected to Receiver Handler
+On: 2011-10-17 18:14:50.837777 Event: Receiver Handler respond
+On: 2011-10-17 18:14:50.851744 Event: Receiver handler : Ready
+On: 2011-10-17 18:14:50.851799 Event: Start Call
+On: 2011-10-17 18:14:50.851882 Event: Waiting Feedback
+On: 2011-10-17 18:15:06.853139 Event: Test Failed
+
+
+------------------STARTED THE LOGGING 2011-10-17 18:15:45.804874 ------------------
+On: 2011-10-17 18:15:45.804952 Event: init Caller
+On: 2011-10-17 18:15:45.804976 Event: GSMRZ1
+On: 2011-10-17 18:15:47.818007 Event: Connected to Caller Handler
+On: 2011-10-17 18:15:47.818297 Event: Caller Handler respond
+On: 2011-10-17 18:15:47.818476 Event: Caller handler : Ready
+On: 2011-10-17 18:15:47.818501 Event: init Receiver
+On: 2011-10-17 18:15:47.818519 Event: GSMRZ3
+On: 2011-10-17 18:15:51.825404 Event: Cannt connect to Receiver
+On: 2011-10-17 18:15:51.825910 Event: 998 General Handler Error: Could not connect Destination handler
+
+
+------------------STARTED THE LOGGING 2011-10-17 18:16:32.873358 ------------------
+On: 2011-10-17 18:16:32.873478 Event: init Caller
+On: 2011-10-17 18:16:32.873512 Event: GSMRZ1
+On: 2011-10-17 18:16:34.878800 Event: Connected to Caller Handler
+On: 2011-10-17 18:16:34.879100 Event: Caller Handler respond
+On: 2011-10-17 18:16:34.879287 Event: Caller handler : Ready
+On: 2011-10-17 18:16:34.879318 Event: init Receiver
+On: 2011-10-17 18:16:34.879336 Event: GSMRZ3
+On: 2011-10-17 18:16:38.886040 Event: Connected to Receiver Handler
+On: 2011-10-17 18:16:54.098993 Event: Receiver Handler respond
+On: 2011-10-17 18:16:54.111385 Event: Receiver handler : Ready
+On: 2011-10-17 18:16:54.111423 Event: Start Call
+On: 2011-10-17 18:16:54.111491 Event: Waiting Feedback
+On: 2011-10-17 18:17:10.112760 Event: Test Failed
+
+
+------------------STARTED THE LOGGING 2011-10-17 18:17:35.332839 ------------------
+On: 2011-10-17 18:17:35.332915 Event: init Caller
+On: 2011-10-17 18:17:35.332941 Event: GSMRZ2
+On: 2011-10-17 18:17:39.340184 Event: Cannt connect to Caller
+On: 2011-10-17 18:17:39.340254 Event: 999 General Handler Error: Could not connect to Caller handler
+
+
+------------------STARTED THE LOGGING 2011-10-17 18:17:54.803029 ------------------
+On: 2011-10-17 18:17:54.803104 Event: init Caller
+On: 2011-10-17 18:17:54.803129 Event: GSMRZ2
+On: 2011-10-17 18:17:58.810130 Event: Connected to Caller Handler
+On: 2011-10-17 18:17:58.828263 Event: Caller Handler respond
+On: 2011-10-17 18:17:58.839077 Event: Caller handler : Ready
+On: 2011-10-17 18:17:58.839131 Event: init Receiver
+On: 2011-10-17 18:17:58.839152 Event: GSMRZ3
+On: 2011-10-17 18:18:02.844653 Event: Connected to Receiver Handler
+On: 2011-10-17 18:18:02.883613 Event: Receiver Handler respond
+On: 2011-10-17 18:18:02.903150 Event: Receiver handler : Ready
+On: 2011-10-17 18:18:02.903191 Event: Start Call
+On: 2011-10-17 18:18:02.903356 Event: Waiting Feedback
+On: 2011-10-17 18:18:08.173066 Event: Test Succeed
+
+
+------------------STARTED THE LOGGING 2011-10-17 18:50:26.930762 ------------------
+On: 2011-10-17 18:50:26.930844 Event: init Caller
+On: 2011-10-17 18:50:26.930870 Event: GSMRZ2
+On: 2011-10-17 18:50:30.951347 Event: Cannt connect to Caller
+On: 2011-10-17 18:50:30.951421 Event: 999 General Handler Error: Could not connect to Caller handler
+
+
+------------------STARTED THE LOGGING 2011-10-17 18:51:46.127949 ------------------
+On: 2011-10-17 18:51:46.128026 Event: init Caller
+On: 2011-10-17 18:51:46.128051 Event: GSMRZ2
+On: 2011-10-17 18:51:50.134168 Event: Connected to Caller Handler
+On: 2011-10-17 18:51:50.152710 Event: Caller Handler respond
+On: 2011-10-17 18:51:50.162567 Event: Caller handler : Ready
+On: 2011-10-17 18:51:50.162604 Event: init Receiver
+On: 2011-10-17 18:51:50.162626 Event: GSMRZ3
+On: 2011-10-17 18:51:54.170122 Event: Cannt connect to Receiver
+On: 2011-10-17 18:51:54.170183 Event: 998 General Handler Error: Could not connect Destination handler
+
+
+------------------STARTED THE LOGGING 2011-10-17 18:54:01.780547 ------------------
+On: 2011-10-17 18:54:01.780623 Event: init Caller
+On: 2011-10-17 18:54:01.780648 Event: GSMRZ2
+On: 2011-10-17 18:54:05.787647 Event: Connected to Caller Handler
+On: 2011-10-17 18:54:05.805544 Event: Caller Handler respond
+On: 2011-10-17 18:54:05.815026 Event: Caller handler : Ready
+On: 2011-10-17 18:54:05.815094 Event: init Receiver
+On: 2011-10-17 18:54:05.815116 Event: GSMRZ3
+On: 2011-10-17 18:54:09.821960 Event: Connected to Receiver Handler
+On: 2011-10-17 18:54:23.950923 Event: Receiver Handler respond
+On: 2011-10-17 18:54:23.961134 Event: Receiver handler : Ready
+On: 2011-10-17 18:54:23.961172 Event: Start Call
+On: 2011-10-17 18:54:23.961233 Event: Waiting Feedback
+On: 2011-10-17 18:54:39.962564 Event: Test Failed
+
+
+------------------STARTED THE LOGGING 2011-10-17 18:56:04.046568 ------------------
+On: 2011-10-17 18:56:04.046646 Event: init Caller
+On: 2011-10-17 18:56:04.046672 Event: GSMRZ2
+On: 2011-10-17 18:56:08.063398 Event: Connected to Caller Handler
+On: 2011-10-17 18:56:08.080980 Event: Caller Handler respond
+On: 2011-10-17 18:56:08.089970 Event: Caller handler : Ready
+On: 2011-10-17 18:56:08.090008 Event: init Receiver
+On: 2011-10-17 18:56:08.090029 Event: GSMRZ3
+On: 2011-10-17 18:56:12.096895 Event: Connected to Receiver Handler
+On: 2011-10-17 18:56:26.519257 Event: Receiver Handler respond
+On: 2011-10-17 18:56:26.529347 Event: Receiver handler : Ready
+On: 2011-10-17 18:56:26.529422 Event: Start Call
+On: 2011-10-17 18:56:26.529484 Event: Waiting Feedback
+On: 2011-10-17 18:56:42.530747 Event: Test Failed
+
+
+------------------STARTED THE LOGGING 2011-10-17 18:57:49.357488 ------------------
+On: 2011-10-17 18:57:49.357568 Event: init Caller
+On: 2011-10-17 18:57:49.357594 Event: GSMRZ2
+On: 2011-10-17 18:57:53.371741 Event: Connected to Caller Handler
+On: 2011-10-17 18:57:53.387024 Event: Caller Handler respond
+On: 2011-10-17 18:57:53.394988 Event: Caller handler : Ready
+On: 2011-10-17 18:57:53.395026 Event: init Receiver
+On: 2011-10-17 18:57:53.395048 Event: GSMRZ3
+On: 2011-10-17 18:57:57.402061 Event: Cannt connect to Receiver
+On: 2011-10-17 18:57:57.402122 Event: 998 General Handler Error: Could not connect Destination handler
+
+
+------------------STARTED THE LOGGING 2011-10-17 18:59:08.416676 ------------------
+On: 2011-10-17 18:59:08.416752 Event: init Caller
+On: 2011-10-17 18:59:08.416778 Event: GSMRZ2
+On: 2011-10-17 18:59:12.423862 Event: Connected to Caller Handler
+On: 2011-10-17 18:59:12.439529 Event: Caller Handler respond
+On: 2011-10-17 18:59:12.447517 Event: Caller handler : Ready
+On: 2011-10-17 18:59:12.447556 Event: init Receiver
+On: 2011-10-17 18:59:12.447577 Event: GSMRZ3
+On: 2011-10-17 18:59:16.453980 Event: Connected to Receiver Handler
+On: 2011-10-17 18:59:30.227380 Event: Receiver Handler respond
+On: 2011-10-17 18:59:30.237344 Event: Receiver handler : Ready
+On: 2011-10-17 18:59:30.237402 Event: Start Call
+On: 2011-10-17 18:59:30.237465 Event: Waiting Feedback
+On: 2011-10-17 18:59:46.238722 Event: Test Failed
+
+
+------------------STARTED THE LOGGING 2011-10-17 19:00:13.053971 ------------------
+On: 2011-10-17 19:00:13.054049 Event: init Caller
+On: 2011-10-17 19:00:13.054074 Event: GSMRZ2
+On: 2011-10-17 19:00:17.070238 Event: Connected to Caller Handler
+On: 2011-10-17 19:00:17.086016 Event: Caller Handler respond
+On: 2011-10-17 19:00:17.094004 Event: Caller handler : Ready
+On: 2011-10-17 19:00:17.094041 Event: init Receiver
+On: 2011-10-17 19:00:17.094062 Event: GSMRZ3
+On: 2011-10-17 19:00:21.100913 Event: Connected to Receiver Handler
+On: 2011-10-17 19:00:35.843655 Event: Receiver Handler respond
+On: 2011-10-17 19:00:35.853710 Event: Receiver handler : Ready
+On: 2011-10-17 19:00:35.853763 Event: Start Call
+On: 2011-10-17 19:00:35.853829 Event: Waiting Feedback
+On: 2011-10-17 19:00:51.855084 Event: Test Failed
+
+
+------------------STARTED THE LOGGING 2011-10-17 19:02:12.734430 ------------------
+On: 2011-10-17 19:02:12.734510 Event: init Caller
+On: 2011-10-17 19:02:12.734535 Event: GSMRZ2
+On: 2011-10-17 19:02:16.752643 Event: Cannt connect to Caller
+On: 2011-10-17 19:02:16.752705 Event: 999 General Handler Error: Could not connect to Caller handler
+On: 2011-10-17 19:02:20.790835 Event:
+On: 2011-10-17 19:02:20.790900 Event: init Caller
+On: 2011-10-17 19:02:20.790920 Event: GSMRZ2
+On: 2011-10-17 19:02:24.806630 Event: Connected to Caller Handler
+On: 2011-10-17 19:02:24.822193 Event: Caller Handler respond
+On: 2011-10-17 19:02:24.830170 Event: Caller handler : Ready
+On: 2011-10-17 19:02:24.830209 Event: init Receiver
+On: 2011-10-17 19:02:24.830230 Event: GSMRZ3
+On: 2011-10-17 19:02:28.836032 Event: Connected to Receiver Handler
+On: 2011-10-17 19:02:43.500786 Event: Receiver Handler respond
+On: 2011-10-17 19:02:43.510803 Event: Receiver handler : Ready
+On: 2011-10-17 19:02:43.510840 Event: Start Call
+On: 2011-10-17 19:02:43.510902 Event: Waiting Feedback
+On: 2011-10-17 19:02:59.512161 Event: Test Failed
+
+
+------------------STARTED THE LOGGING 2011-10-17 19:04:42.097567 ------------------
+On: 2011-10-17 19:04:42.097643 Event: init Caller
+On: 2011-10-17 19:04:42.097669 Event: GSMRZ2
+
+
+------------------STARTED THE LOGGING 2011-10-17 19:05:02.787875 ------------------
+On: 2011-10-17 19:05:02.787953 Event: init Caller
+On: 2011-10-17 19:05:02.787978 Event: GSMRZ2
+On: 2011-10-17 19:05:06.795100 Event: Connected to Caller Handler
+On: 2011-10-17 19:05:06.809911 Event: Caller Handler respond
+On: 2011-10-17 19:05:06.817791 Event: Caller handler : Ready
+On: 2011-10-17 19:05:06.817828 Event: init Receiver
+On: 2011-10-17 19:05:06.817850 Event: GSMRZ3
+On: 2011-10-17 19:05:10.824173 Event: Cannt connect to Receiver
+On: 2011-10-17 19:05:10.824234 Event: 998 General Handler Error: Could not connect Destination handler
+
+
+------------------STARTED THE LOGGING 2011-10-17 19:06:34.374204 ------------------
+On: 2011-10-17 19:06:34.374282 Event: init Caller
+On: 2011-10-17 19:06:34.374308 Event: GSMRZ2
+On: 2011-10-17 19:06:38.390200 Event: Connected to Caller Handler
+On: 2011-10-17 19:06:38.405745 Event: Caller Handler respond
+On: 2011-10-17 19:06:38.413727 Event: Caller handler : Ready
+On: 2011-10-17 19:06:38.413762 Event: init Receiver
+On: 2011-10-17 19:06:38.413785 Event: GSMRZ3
+On: 2011-10-17 19:06:42.420673 Event: Connected to Receiver Handler
+On: 2011-10-17 19:06:56.909494 Event: Receiver Handler respond
+On: 2011-10-17 19:06:56.919261 Event: Receiver handler : Ready
+On: 2011-10-17 19:06:56.919297 Event: Start Call
+On: 2011-10-17 19:06:56.919358 Event: Waiting Feedback
+On: 2011-10-17 19:07:12.920606 Event: Test Failed
+
+
+------------------STARTED THE LOGGING 2011-10-17 19:08:28.559924 ------------------
+On: 2011-10-17 19:08:28.560001 Event: init Caller
+On: 2011-10-17 19:08:28.560026 Event: GSMRZ2
+On: 2011-10-17 19:08:32.567229 Event: Cannt connect to Caller
+On: 2011-10-17 19:08:32.567294 Event: 999 General Handler Error: Could not connect to Caller handler
+On: 2011-10-17 19:08:36.605695 Event:
+On: 2011-10-17 19:08:36.605759 Event: init Caller
+On: 2011-10-17 19:08:36.605780 Event: GSMRZ3
+On: 2011-10-17 19:08:40.619715 Event: Connected to Caller Handler
+On: 2011-10-17 19:08:54.823717 Event: Caller Handler respond
+On: 2011-10-17 19:08:54.833936 Event: Caller handler : Ready
+On: 2011-10-17 19:08:54.834002 Event: init Receiver
+On: 2011-10-17 19:08:54.834025 Event: GSMRZ2
+On: 2011-10-17 19:08:58.839990 Event: Connected to Receiver Handler
+On: 2011-10-17 19:08:58.855608 Event: Receiver Handler respond
+On: 2011-10-17 19:08:58.863595 Event: Receiver handler : Ready
+On: 2011-10-17 19:08:58.863631 Event: Start Call
+On: 2011-10-17 19:08:58.863689 Event: Waiting Feedback
+On: 2011-10-17 19:09:04.329570 Event: Test Succeed
+On: 2011-10-17 19:09:08.373943 Event:
+On: 2011-10-17 19:09:08.374004 Event: init Caller
+On: 2011-10-17 19:09:08.374024 Event: GSMRZ3
+On: 2011-10-17 19:09:12.391233 Event: Connected to Caller Handler
+On: 2011-10-17 19:09:27.252686 Event: Caller Handler respond
+On: 2011-10-17 19:09:27.262858 Event: Caller handler : Ready
+On: 2011-10-17 19:09:27.262895 Event: init Receiver
+On: 2011-10-17 19:09:27.262917 Event: GSMRZ2
+On: 2011-10-17 19:09:31.269794 Event: Connected to Receiver Handler
+On: 2011-10-17 19:09:31.285067 Event: Receiver Handler respond
+On: 2011-10-17 19:09:31.293009 Event: Receiver handler : Ready
+On: 2011-10-17 19:09:31.293041 Event: Start Call
+On: 2011-10-17 19:09:31.293098 Event: Waiting Feedback
+On: 2011-10-17 19:09:37.370014 Event: Test Succeed
+
+
+------------------STARTED THE LOGGING 2011-10-17 19:09:52.956439 ------------------
+On: 2011-10-17 19:09:52.956516 Event: init Caller
+On: 2011-10-17 19:09:52.956542 Event: GSMRZ3
+On: 2011-10-17 19:09:56.963533 Event: Connected to Caller Handler
+On: 2011-10-17 19:10:11.623082 Event: Caller Handler respond
+On: 2011-10-17 19:10:11.633242 Event: Caller handler : Ready
+On: 2011-10-17 19:10:11.633280 Event: init Receiver
+On: 2011-10-17 19:10:11.633301 Event: GSMRZ2
+On: 2011-10-17 19:10:15.640114 Event: Connected to Receiver Handler
+On: 2011-10-17 19:10:15.655944 Event: Receiver Handler respond
+On: 2011-10-17 19:10:15.663764 Event: Receiver handler : Ready
+On: 2011-10-17 19:10:15.663804 Event: Start Call
+On: 2011-10-17 19:10:15.663865 Event: Waiting Feedback
+On: 2011-10-17 19:10:25.403081 Event: Test Succeed
+On: 2011-10-17 19:10:29.440096 Event:
+On: 2011-10-17 19:10:29.440159 Event: init Caller
+On: 2011-10-17 19:10:29.440179 Event: GSMRZ3
+On: 2011-10-17 19:10:33.446949 Event: Connected to Caller Handler
+On: 2011-10-17 19:10:48.200079 Event: Caller Handler respond
+On: 2011-10-17 19:10:48.210239 Event: Caller handler : Ready
+On: 2011-10-17 19:10:48.210274 Event: init Receiver
+On: 2011-10-17 19:10:48.210296 Event: GSMRZ2
+On: 2011-10-17 19:10:52.217115 Event: Connected to Receiver Handler
+On: 2011-10-17 19:10:52.232476 Event: Receiver Handler respond
+On: 2011-10-17 19:10:52.240359 Event: Receiver handler : Ready
+On: 2011-10-17 19:10:52.240395 Event: Start Call
+On: 2011-10-17 19:10:52.240453 Event: Waiting Feedback
+On: 2011-10-17 19:10:57.724773 Event: Test Succeed
+On: 2011-10-17 19:11:01.763949 Event:
+On: 2011-10-17 19:11:01.764009 Event: init Caller
+On: 2011-10-17 19:11:01.764030 Event: GSMRZ2
+On: 2011-10-17 19:11:05.770876 Event: Connected to Caller Handler
+On: 2011-10-17 19:11:05.786275 Event: Caller Handler respond
+On: 2011-10-17 19:11:05.794110 Event: Caller handler : Ready
+On: 2011-10-17 19:11:05.794145 Event: init Receiver
+On: 2011-10-17 19:11:05.794166 Event: GSMRZ3
+On: 2011-10-17 19:11:09.800985 Event: Connected to Receiver Handler
+On: 2011-10-17 19:11:24.159820 Event: Receiver Handler respond
+On: 2011-10-17 19:11:24.170163 Event: Receiver handler : Ready
+On: 2011-10-17 19:11:24.170202 Event: Start Call
+On: 2011-10-17 19:11:24.170262 Event: Waiting Feedback
+On: 2011-10-17 19:11:39.170482 Event: Test Failed
+On: 2011-10-17 19:11:43.208398 Event:
+On: 2011-10-17 19:11:43.208462 Event: init Caller
+On: 2011-10-17 19:11:43.208482 Event: GSMRZ2
+On: 2011-10-17 19:11:47.215286 Event: Connected to Caller Handler
+On: 2011-10-17 19:11:47.230357 Event: Caller Handler respond
+On: 2011-10-17 19:11:47.238174 Event: Caller handler : Ready
+On: 2011-10-17 19:11:47.238209 Event: init Receiver
+On: 2011-10-17 19:11:47.238229 Event: GSMRZ3
+On: 2011-10-17 19:11:51.244951 Event: Connected to Receiver Handler
+On: 2011-10-17 19:12:05.903907 Event: Receiver Handler respond
+On: 2011-10-17 19:12:05.914010 Event: Receiver handler : Ready
+On: 2011-10-17 19:12:05.914047 Event: Start Call
+On: 2011-10-17 19:12:05.914106 Event: Waiting Feedback
+On: 2011-10-17 19:12:20.914325 Event: Test Failed
+
+
+------------------STARTED THE LOGGING 2011-10-17 19:13:58.036402 ------------------
+On: 2011-10-17 19:13:58.036479 Event: init Caller
+On: 2011-10-17 19:13:58.036505 Event: GSMRZ3
+On: 2011-10-17 19:14:02.043641 Event: Connected to Caller Handler
+On: 2011-10-17 19:14:16.553712 Event: Caller Handler respond
+On: 2011-10-17 19:14:16.563878 Event: Caller handler : Ready
+On: 2011-10-17 19:14:16.563915 Event: init Receiver
+On: 2011-10-17 19:14:16.563937 Event: GSMRZ2
+On: 2011-10-17 19:14:20.570980 Event: Cannt connect to Receiver
+On: 2011-10-17 19:14:20.571041 Event: 998 General Handler Error: Could not connect Destination handler
+On: 2011-10-17 19:14:24.608749 Event:
+On: 2011-10-17 19:14:24.608810 Event: init Caller
+On: 2011-10-17 19:14:24.608831 Event: GSMRZ3
+On: 2011-10-17 19:14:28.615741 Event: Connected to Caller Handler
+On: 2011-10-17 19:14:42.957255 Event: Caller Handler respond
+On: 2011-10-17 19:14:42.967571 Event: Caller handler : Ready
+On: 2011-10-17 19:14:42.967609 Event: init Receiver
+On: 2011-10-17 19:14:42.967631 Event: GSMRZ2
+On: 2011-10-17 19:14:46.974520 Event: Connected to Receiver Handler
+On: 2011-10-17 19:14:46.989866 Event: Receiver Handler respond
+On: 2011-10-17 19:14:46.997656 Event: Receiver handler : Ready
+On: 2011-10-17 19:14:46.997694 Event: Start Call
+On: 2011-10-17 19:14:46.997754 Event: Waiting Feedback
+On: 2011-10-17 19:14:51.359874 Event: Test Succeed
+On: 2011-10-17 19:14:55.398059 Event:
+On: 2011-10-17 19:14:55.398125 Event: init Caller
+On: 2011-10-17 19:14:55.398146 Event: GSMRZ2
+On: 2011-10-17 19:14:59.414887 Event: Connected to Caller Handler
+On: 2011-10-17 19:14:59.428721 Event: Caller Handler respond
+On: 2011-10-17 19:14:59.436587 Event: Caller handler : Ready
+On: 2011-10-17 19:14:59.436623 Event: init Receiver
+On: 2011-10-17 19:14:59.436645 Event: GSMRZ3
+On: 2011-10-17 19:15:03.443564 Event: Connected to Receiver Handler
+On: 2011-10-17 19:15:17.688544 Event: Receiver Handler respond
+On: 2011-10-17 19:15:17.698677 Event: Receiver handler : Ready
+On: 2011-10-17 19:15:17.698715 Event: Start Call
+On: 2011-10-17 19:15:17.698773 Event: Waiting Feedback
+On: 2011-10-17 19:15:32.699003 Event: Test Failed
+On: 2011-10-17 19:15:36.736767 Event:
+On: 2011-10-17 19:15:36.736832 Event: init Caller
+On: 2011-10-17 19:15:36.736852 Event: GSMRZ2
+On: 2011-10-17 19:15:40.743680 Event: Connected to Caller Handler
+On: 2011-10-17 19:15:40.759235 Event: Caller Handler respond
+On: 2011-10-17 19:15:40.767174 Event: Caller handler : Ready
+On: 2011-10-17 19:15:40.767209 Event: init Receiver
+On: 2011-10-17 19:15:40.767230 Event: GSMRZ3
+On: 2011-10-17 19:15:44.774119 Event: Connected to Receiver Handler
+On: 2011-10-17 19:15:59.304491 Event: Receiver Handler respond
+On: 2011-10-17 19:15:59.314665 Event: Receiver handler : Ready
+On: 2011-10-17 19:15:59.314703 Event: Start Call
+On: 2011-10-17 19:15:59.314763 Event: Waiting Feedback
+On: 2011-10-17 19:16:14.314993 Event: Test Failed
+
+
+------------------STARTED THE LOGGING 2011-10-17 19:19:35.154935 ------------------
+On: 2011-10-17 19:19:35.155012 Event: init Caller
+On: 2011-10-17 19:19:35.155037 Event: GSMRZ3
+On: 2011-10-17 19:19:39.162262 Event: Cannt connect to Caller
+On: 2011-10-17 19:19:39.162326 Event: 999 General Handler Error: Could not connect to Caller handler
+On: 2011-10-17 19:19:43.200460 Event:
+On: 2011-10-17 19:19:43.200521 Event: init Caller
+On: 2011-10-17 19:19:43.200541 Event: GSMRZ3
+On: 2011-10-17 19:19:47.207486 Event: Connected to Caller Handler
+On: 2011-10-17 19:20:17.207755 Event: 999 General Handler Error: Could not connect to Caller handler
+On: 2011-10-17 19:20:21.247823 Event:
+On: 2011-10-17 19:20:21.247886 Event: init Caller
+On: 2011-10-17 19:20:21.247906 Event: GSMRZ2
+On: 2011-10-17 19:20:25.264689 Event: Cannt connect to Caller
+On: 2011-10-17 19:20:25.264751 Event: 999 General Handler Error: Could not connect to Caller handler
+On: 2011-10-17 19:20:29.303094 Event:
+On: 2011-10-17 19:20:29.303156 Event: init Caller
+On: 2011-10-17 19:20:29.303177 Event: GSMRZ2
+On: 2011-10-17 19:20:33.319865 Event: Connected to Caller Handler
+On: 2011-10-17 19:20:33.335357 Event: Caller Handler respond
+On: 2011-10-17 19:20:33.343280 Event: Caller handler : Ready
+On: 2011-10-17 19:20:33.343316 Event: init Receiver
+On: 2011-10-17 19:20:33.343338 Event: GSMRZ3
+On: 2011-10-17 19:20:37.350273 Event: Connected to Receiver Handler
+On: 2011-10-17 19:20:51.919057 Event: Receiver Handler respond
+On: 2011-10-17 19:20:51.929143 Event: Receiver handler : Ready
+On: 2011-10-17 19:20:51.929180 Event: Start Call
+On: 2011-10-17 19:20:51.929239 Event: Waiting Feedback
+On: 2011-10-17 19:21:06.929502 Event: Test Failed
+
+
+------------------STARTED THE LOGGING 2011-10-17 19:23:01.859897 ------------------
+On: 2011-10-17 19:23:01.859976 Event: init Caller
+On: 2011-10-17 19:23:01.860002 Event: GSMRZ3
+On: 2011-10-17 19:23:05.866187 Event: Connected to Caller Handler
+On: 2011-10-17 19:23:20.667706 Event: Caller Handler respond
+On: 2011-10-17 19:23:20.677852 Event: Caller handler : Ready
+On: 2011-10-17 19:23:20.677890 Event: init Receiver
+On: 2011-10-17 19:23:20.677912 Event: GSMRZ2
+On: 2011-10-17 19:23:24.684753 Event: Connected to Receiver Handler
+On: 2011-10-17 19:23:24.700060 Event: Receiver Handler respond
+On: 2011-10-17 19:23:24.707943 Event: Receiver handler : Ready
+On: 2011-10-17 19:23:24.707978 Event: Start Call
+On: 2011-10-17 19:23:24.708036 Event: Waiting Feedback
+On: 2011-10-17 19:23:29.091979 Event: Test Succeed
+On: 2011-10-17 19:23:33.130382 Event:
+On: 2011-10-17 19:23:33.130442 Event: init Caller
+On: 2011-10-17 19:23:33.130462 Event: GSMRZ3
+On: 2011-10-17 19:23:37.147102 Event: Connected to Caller Handler
+On: 2011-10-17 19:23:51.586189 Event: Caller Handler respond
+On: 2011-10-17 19:23:51.595993 Event: Caller handler : Ready
+On: 2011-10-17 19:23:51.596029 Event: init Receiver
+On: 2011-10-17 19:23:51.596051 Event: GSMRZ2
+On: 2011-10-17 19:23:55.602953 Event: Connected to Receiver Handler
+On: 2011-10-17 19:23:55.616496 Event: Receiver Handler respond
+On: 2011-10-17 19:23:55.624393 Event: Receiver handler : Ready
+On: 2011-10-17 19:23:55.624427 Event: Start Call
+On: 2011-10-17 19:23:55.624484 Event: Waiting Feedback
+On: 2011-10-17 19:24:01.007125 Event: Test Succeed
+On: 2011-10-17 19:24:05.046042 Event:
+On: 2011-10-17 19:24:05.046105 Event: init Caller
+On: 2011-10-17 19:24:05.046125 Event: GSMRZ2
+On: 2011-10-17 19:24:09.062936 Event: Connected to Caller Handler
+On: 2011-10-17 19:24:09.078367 Event: Caller Handler respond
+On: 2011-10-17 19:24:09.086430 Event: Caller handler : Ready
+On: 2011-10-17 19:24:09.086465 Event: init Receiver
+On: 2011-10-17 19:24:09.086486 Event: GSMRZ3
+On: 2011-10-17 19:24:13.093397 Event: Connected to Receiver Handler
+On: 2011-10-17 19:24:27.228902 Event: Receiver Handler respond
+On: 2011-10-17 19:24:27.238868 Event: Receiver handler : Ready
+On: 2011-10-17 19:24:27.238905 Event: Start Call
+On: 2011-10-17 19:24:27.238967 Event: Waiting Feedback
+On: 2011-10-17 19:24:42.239193 Event: Test Failed
+On: 2011-10-17 19:24:46.276325 Event:
+On: 2011-10-17 19:24:46.276389 Event: init Caller
+On: 2011-10-17 19:24:46.276409 Event: GSMRZ2
+On: 2011-10-17 19:24:50.283262 Event: Connected to Caller Handler
+On: 2011-10-17 19:24:50.298651 Event: Caller Handler respond
+On: 2011-10-17 19:24:50.306576 Event: Caller handler : Ready
+On: 2011-10-17 19:24:50.306612 Event: init Receiver
+On: 2011-10-17 19:24:50.306633 Event: GSMRZ3
+On: 2011-10-17 19:24:54.313492 Event: Connected to Receiver Handler
+On: 2011-10-17 19:25:09.047467 Event: Receiver Handler respond
+On: 2011-10-17 19:25:09.057433 Event: Receiver handler : Ready
+On: 2011-10-17 19:25:09.057470 Event: Start Call
+On: 2011-10-17 19:25:09.057530 Event: Waiting Feedback
+On: 2011-10-17 19:25:24.057760 Event: Test Failed
+
+
+------------------STARTED THE LOGGING 2011-10-17 19:27:44.091335 ------------------
+On: 2011-10-17 19:27:44.091413 Event: init Caller
+On: 2011-10-17 19:27:44.091439 Event: GSMRZ3
+On: 2011-10-17 19:27:48.098577 Event: Connected to Caller Handler
+On: 2011-10-17 19:28:02.569778 Event: Caller Handler respond
+On: 2011-10-17 19:28:02.579854 Event: Caller handler : Ready
+On: 2011-10-17 19:28:02.579893 Event: init Receiver
+On: 2011-10-17 19:28:02.579914 Event: GSMRZ2
+On: 2011-10-17 19:28:06.586938 Event: Cannt connect to Receiver
+On: 2011-10-17 19:28:06.587000 Event: 998 General Handler Error: Could not connect Destination handler
+On: 2011-10-17 19:28:10.626051 Event:
+On: 2011-10-17 19:28:10.626114 Event: init Caller
+On: 2011-10-17 19:28:10.626135 Event: GSMRZ3
+On: 2011-10-17 19:28:14.642802 Event: Connected to Caller Handler
+On: 2011-10-17 19:28:29.371927 Event: Caller Handler respond
+On: 2011-10-17 19:28:29.382228 Event: Caller handler : Ready
+On: 2011-10-17 19:28:29.382263 Event: init Receiver
+On: 2011-10-17 19:28:29.382284 Event: GSMRZ2
+On: 2011-10-17 19:28:33.389181 Event: Connected to Receiver Handler
+On: 2011-10-17 19:28:33.404305 Event: Receiver Handler respond
+On: 2011-10-17 19:28:33.412235 Event: Receiver handler : Ready
+On: 2011-10-17 19:28:33.412272 Event: Start Call
+On: 2011-10-17 19:28:33.412329 Event: Waiting Feedback
+On: 2011-10-17 19:28:38.471696 Event: Test Succeed
+On: 2011-10-17 19:28:42.511090 Event:
+On: 2011-10-17 19:28:42.511157 Event: init Caller
+On: 2011-10-17 19:28:42.511177 Event: GSMRZ2
+On: 2011-10-17 19:28:46.527791 Event: Connected to Caller Handler
+On: 2011-10-17 19:28:46.541442 Event: Caller Handler respond
+On: 2011-10-17 19:28:46.549342 Event: Caller handler : Ready
+On: 2011-10-17 19:28:46.549394 Event: init Receiver
+On: 2011-10-17 19:28:46.549416 Event: GSMRZ3
+On: 2011-10-17 19:28:50.556356 Event: Connected to Receiver Handler
+On: 2011-10-17 19:29:05.825013 Event: Receiver Handler respond
+On: 2011-10-17 19:29:05.835168 Event: Receiver handler : Ready
+On: 2011-10-17 19:29:05.835221 Event: Start Call
+On: 2011-10-17 19:29:05.835287 Event: Waiting Feedback
+On: 2011-10-17 19:29:20.835510 Event: Test Failed
+On: 2011-10-17 19:29:24.875288 Event:
+On: 2011-10-17 19:29:24.875354 Event: init Caller
+On: 2011-10-17 19:29:24.875374 Event: GSMRZ2
+On: 2011-10-17 19:29:28.891799 Event: Connected to Caller Handler
+On: 2011-10-17 19:29:28.907075 Event: Caller Handler respond
+On: 2011-10-17 19:29:28.914969 Event: Caller handler : Ready
+On: 2011-10-17 19:29:28.915003 Event: init Receiver
+On: 2011-10-17 19:29:28.915024 Event: GSMRZ3
+On: 2011-10-17 19:29:32.920466 Event: Connected to Receiver Handler
+On: 2011-10-17 19:29:47.148523 Event: Receiver Handler respond
+On: 2011-10-17 19:29:47.158531 Event: Receiver handler : Ready
+On: 2011-10-17 19:29:47.158566 Event: Start Call
+On: 2011-10-17 19:29:47.158625 Event: Waiting Feedback
+On: 2011-10-17 19:30:02.158848 Event: Test Failed
+
+
+------------------STARTED THE LOGGING 2011-10-18 17:50:33.982830 ------------------
+On: 2011-10-18 17:50:33.982909 Event: init Caller
+On: 2011-10-18 17:50:33.982934 Event: GSMRZ3
+On: 2011-10-18 17:51:08.024111 Event: Connected to Caller Handler
+On: 2011-10-18 17:51:08.054797 Event: Caller Handler respond
+On: 2011-10-18 17:51:08.071930 Event: Caller handler : Ready
+On: 2011-10-18 17:51:08.071996 Event: init Receiver
+On: 2011-10-18 17:51:08.072018 Event: GSMRZ2
+On: 2011-10-18 17:51:12.078876 Event: Connected to Receiver Handler
+On: 2011-10-18 17:51:12.098338 Event: Receiver Handler respond
+On: 2011-10-18 17:51:12.108792 Event: Receiver handler : Ready
+On: 2011-10-18 17:51:12.108828 Event: Start Call
+On: 2011-10-18 17:51:12.108887 Event: Waiting Feedback
+On: 2011-10-18 17:51:16.766537 Event: Test Succeed
+On: 2011-10-18 17:51:20.809401 Event:
+On: 2011-10-18 17:51:20.809464 Event: init Caller
+On: 2011-10-18 17:51:20.809483 Event: GSMRZ2
+On: 2011-10-18 17:51:54.840283 Event: Connected to Caller Handler
+On: 2011-10-18 17:51:54.856651 Event: Caller Handler respond
+On: 2011-10-18 17:51:54.866308 Event: Caller handler : Ready
+On: 2011-10-18 17:51:54.866358 Event: init Receiver
+On: 2011-10-18 17:51:54.866379 Event: GSMRZ3
+On: 2011-10-18 17:51:58.873211 Event: Connected to Receiver Handler
+On: 2011-10-18 17:52:14.473107 Event: Receiver Handler respond
+On: 2011-10-18 17:52:14.489055 Event: Receiver handler : Ready
+On: 2011-10-18 17:52:14.489091 Event: Start Call
+On: 2011-10-18 17:52:14.489150 Event: Waiting Feedback
+On: 2011-10-18 17:52:29.489375 Event: Test Failed
+
+
+------------------STARTED THE LOGGING 2011-10-18 17:53:23.441285 ------------------
+On: 2011-10-18 17:53:23.441363 Event: init Caller
+On: 2011-10-18 17:53:23.441388 Event: GSMRZ3
+On: 2011-10-18 17:53:57.478489 Event: Connected to Caller Handler
+On: 2011-10-18 17:53:57.504081 Event: Caller Handler respond
+On: 2011-10-18 17:53:57.518282 Event: Caller handler : Ready
+On: 2011-10-18 17:53:57.518345 Event: init Receiver
+On: 2011-10-18 17:53:57.518367 Event: GSMRZ2
+On: 2011-10-18 17:54:31.550542 Event: Connected to Receiver Handler
+On: 2011-10-18 17:54:31.568171 Event: Receiver Handler respond
+On: 2011-10-18 17:54:31.577475 Event: Receiver handler : Ready
+On: 2011-10-18 17:54:31.577510 Event: Start Call
+On: 2011-10-18 17:54:31.577569 Event: Waiting Feedback
+On: 2011-10-18 17:54:46.577811 Event: Test Failed
+On: 2011-10-18 17:54:50.615672 Event:
+On: 2011-10-18 17:54:50.615733 Event: init Caller
+On: 2011-10-18 17:54:50.615753 Event: GSMRZ2
+On: 2011-10-18 17:55:24.640276 Event: Connected to Caller Handler
+On: 2011-10-18 17:55:24.656419 Event: Caller Handler respond
+On: 2011-10-18 17:55:24.664647 Event: Caller handler : Ready
+On: 2011-10-18 17:55:24.664681 Event: init Receiver
+On: 2011-10-18 17:55:24.664702 Event: GSMRZ3
+On: 2011-10-18 17:55:58.676265 Event: Connected to Receiver Handler
+On: 2011-10-18 17:55:58.699219 Event: Receiver Handler respond
+On: 2011-10-18 17:55:58.711254 Event: Receiver handler : Ready
+On: 2011-10-18 17:55:58.711286 Event: Start Call
+On: 2011-10-18 17:55:58.711345 Event: Waiting Feedback
+On: 2011-10-18 17:56:13.711567 Event: Test Failed
+
+
+------------------STARTED THE LOGGING 2011-10-18 17:59:52.498275 ------------------
+On: 2011-10-18 17:59:52.498351 Event: init Caller
+On: 2011-10-18 17:59:52.498376 Event: GSMRZ1
+On: 2011-10-18 17:59:54.509426 Event: Connected to Caller Handler
+On: 2011-10-18 17:59:54.509906 Event: Caller Handler respond
+On: 2011-10-18 17:59:54.510149 Event: Caller handler : Ready
+On: 2011-10-18 17:59:54.510180 Event: init Receiver
+On: 2011-10-18 17:59:54.510200 Event: GSMRZ2
+On: 2011-10-18 17:59:58.517114 Event: Cannt connect to Receiver
+On: 2011-10-18 17:59:58.517174 Event: 998 General Handler Error: Could not connect Destination handler
+On: 2011-10-18 18:00:02.558092 Event:
+On: 2011-10-18 18:00:02.558158 Event: init Caller
+On: 2011-10-18 18:00:02.558178 Event: GSMRZ2
+On: 2011-10-18 18:00:06.574246 Event: Connected to Caller Handler
+On: 2011-10-18 18:00:06.590112 Event: Caller Handler respond
+On: 2011-10-18 18:00:06.598237 Event: Caller handler : Ready
+On: 2011-10-18 18:00:06.598303 Event: init Receiver
+On: 2011-10-18 18:00:06.598326 Event: GSMRZ1
+On: 2011-10-18 18:00:08.603341 Event: Connected to Receiver Handler
+On: 2011-10-18 18:00:08.603624 Event: Receiver Handler respond
+On: 2011-10-18 18:00:08.603808 Event: Receiver handler : Ready
+On: 2011-10-18 18:00:08.603837 Event: Start Call
+On: 2011-10-18 18:00:08.605793 Event: Waiting Feedback
+On: 2011-10-18 18:00:14.124675 Event: Test Succeed
+
+
+------------------STARTED THE LOGGING 2011-10-18 18:03:05.409926 ------------------
+On: 2011-10-18 18:03:05.410004 Event: init Caller
+On: 2011-10-18 18:03:05.410028 Event: GSMRZ2
+On: 2011-10-18 18:03:09.418445 Event: Connected to Caller Handler
+On: 2011-10-18 18:03:09.434222 Event: Caller Handler respond
+On: 2011-10-18 18:03:09.442261 Event: Caller handler : Ready
+On: 2011-10-18 18:03:09.442300 Event: init Receiver
+On: 2011-10-18 18:03:09.442322 Event: GSMRZ1
+On: 2011-10-18 18:03:11.447333 Event: Connected to Receiver Handler
+On: 2011-10-18 18:03:11.447623 Event: Receiver Handler respond
+On: 2011-10-18 18:03:11.447811 Event: Receiver handler : Ready
+On: 2011-10-18 18:03:11.447841 Event: Start Call
+On: 2011-10-18 18:03:11.449913 Event: Waiting Feedback
+On: 2011-10-18 18:03:16.843603 Event: Test Succeed
+
+
+------------------STARTED THE LOGGING 2011-10-18 18:04:04.728323 ------------------
+On: 2011-10-18 18:04:04.728399 Event: init Caller
+On: 2011-10-18 18:04:04.728424 Event: GSMRZ2
+On: 2011-10-18 18:04:08.735460 Event: Connected to Caller Handler
+On: 2011-10-18 18:04:08.750432 Event: Caller Handler respond
+On: 2011-10-18 18:04:08.758656 Event: Caller handler : Ready
+On: 2011-10-18 18:04:08.758692 Event: init Receiver
+On: 2011-10-18 18:04:08.758713 Event: GSMRZ1
+On: 2011-10-18 18:04:10.763741 Event: Connected to Receiver Handler
+On: 2011-10-18 18:04:10.764030 Event: Receiver Handler respond
+On: 2011-10-18 18:04:10.764214 Event: Receiver handler : Ready
+On: 2011-10-18 18:04:10.764242 Event: Start Call
+On: 2011-10-18 18:04:10.769767 Event: Waiting Feedback
+On: 2011-10-18 18:04:15.049091 Event: Test Succeed
+
+
+------------------STARTED THE LOGGING 2011-10-18 18:04:52.611115 ------------------
+On: 2011-10-18 18:04:52.611190 Event: init Caller
+On: 2011-10-18 18:04:52.611215 Event: GSMRZ2
+On: 2011-10-18 18:04:56.628347 Event: Connected to Caller Handler
+On: 2011-10-18 18:04:56.644569 Event: Caller Handler respond
+On: 2011-10-18 18:04:56.652893 Event: Caller handler : Ready
+On: 2011-10-18 18:04:56.652930 Event: init Receiver
+On: 2011-10-18 18:04:56.652951 Event: GSMRZ1
+On: 2011-10-18 18:04:58.658075 Event: Connected to Receiver Handler
+On: 2011-10-18 18:04:58.658365 Event: Receiver Handler respond
+On: 2011-10-18 18:04:58.658547 Event: Receiver handler : Ready
+On: 2011-10-18 18:04:58.658578 Event: Start Call
+On: 2011-10-18 18:04:58.661905 Event: Waiting Feedback
+On: 2011-10-18 18:05:02.996682 Event: Test Succeed
+
+
+------------------STARTED THE LOGGING 2011-10-18 18:05:56.307813 ------------------
+On: 2011-10-18 18:05:56.307884 Event: init Caller
+On: 2011-10-18 18:05:56.307911 Event: GSMRZ1
+On: 2011-10-18 18:05:58.313189 Event: Connected to Caller Handler
+On: 2011-10-18 18:05:58.313493 Event: Caller Handler respond
+On: 2011-10-18 18:05:58.313724 Event: Caller handler : Ready
+On: 2011-10-18 18:05:58.313755 Event: init Receiver
+On: 2011-10-18 18:05:58.313775 Event: GSMRZ2
+On: 2011-10-18 18:06:02.320781 Event: Connected to Receiver Handler
+On: 2011-10-18 18:06:02.336185 Event: Receiver Handler respond
+On: 2011-10-18 18:06:02.344608 Event: Receiver handler : Ready
+On: 2011-10-18 18:06:02.344644 Event: Start Call
+On: 2011-10-18 18:06:02.349794 Event: Waiting Feedback
+On: 2011-10-18 18:06:06.413837 Event: Test Succeed
+On: 2011-10-18 18:06:10.466431 Event:
+On: 2011-10-18 18:06:10.466495 Event: init Caller
+On: 2011-10-18 18:06:10.466516 Event: GSMRZ2
+On: 2011-10-18 18:06:14.479776 Event: Connected to Caller Handler
+On: 2011-10-18 18:06:14.496070 Event: Caller Handler respond
+On: 2011-10-18 18:06:14.504456 Event: Caller handler : Ready
+On: 2011-10-18 18:06:14.504490 Event: init Receiver
+On: 2011-10-18 18:06:14.504511 Event: GSMRZ1
+On: 2011-10-18 18:06:16.509579 Event: Connected to Receiver Handler
+On: 2011-10-18 18:06:16.509922 Event: Receiver Handler respond
+On: 2011-10-18 18:06:16.510102 Event: Receiver handler : Ready
+On: 2011-10-18 18:06:16.510126 Event: Start Call
+On: 2011-10-18 18:06:16.513779 Event: Waiting Feedback
+On: 2011-10-18 18:06:22.593899 Event: Test Succeed
+
+
+------------------STARTED THE LOGGING 2011-10-18 18:07:45.759230 ------------------
+On: 2011-10-18 18:07:45.759306 Event: init Caller
+On: 2011-10-18 18:07:45.759332 Event: GSMRZ1
+On: 2011-10-18 18:07:47.774235 Event: Connected to Caller Handler
+On: 2011-10-18 18:07:47.774543 Event: Caller Handler respond
+On: 2011-10-18 18:07:47.774731 Event: Caller handler : Ready
+On: 2011-10-18 18:07:47.774756 Event: init Receiver
+On: 2011-10-18 18:07:47.774775 Event: GSMRZ2
+On: 2011-10-18 18:07:51.782562 Event: Connected to Receiver Handler
+On: 2011-10-18 18:07:51.798635 Event: Receiver Handler respond
+On: 2011-10-18 18:07:51.806933 Event: Receiver handler : Ready
+On: 2011-10-18 18:07:51.806970 Event: Start Call
+On: 2011-10-18 18:07:51.808826 Event: Waiting Feedback
+On: 2011-10-18 18:07:56.469825 Event: Test Succeed
+On: 2011-10-18 18:08:00.539459 Event:
+On: 2011-10-18 18:08:00.539522 Event: init Caller
+On: 2011-10-18 18:08:00.539542 Event: GSMRZ2
+On: 2011-10-18 18:08:04.544312 Event: Connected to Caller Handler
+On: 2011-10-18 18:08:04.560266 Event: Caller Handler respond
+On: 2011-10-18 18:08:04.568540 Event: Caller handler : Ready
+On: 2011-10-18 18:08:04.568575 Event: init Receiver
+On: 2011-10-18 18:08:04.568597 Event: GSMRZ1
+On: 2011-10-18 18:08:06.573580 Event: Connected to Receiver Handler
+On: 2011-10-18 18:08:06.573939 Event: Receiver Handler respond
+On: 2011-10-18 18:08:06.574133 Event: Receiver handler : Ready
+On: 2011-10-18 18:08:06.574166 Event: Start Call
+On: 2011-10-18 18:08:06.577779 Event: Waiting Feedback
+On: 2011-10-18 18:08:16.255157 Event: Test Succeed
+
+
+------------------STARTED THE LOGGING 2011-10-18 18:08:44.820195 ------------------
+On: 2011-10-18 18:08:44.820269 Event: init Caller
+On: 2011-10-18 18:08:44.820294 Event: GSMRZ1
+On: 2011-10-18 18:08:46.825233 Event: Connected to Caller Handler
+On: 2011-10-18 18:08:46.826182 Event: Caller Handler respond
+On: 2011-10-18 18:08:46.826565 Event: Caller handler : Ready
+On: 2011-10-18 18:08:46.826595 Event: init Receiver
+On: 2011-10-18 18:08:46.826615 Event: GSMRZ3
+On: 2011-10-18 18:08:50.832308 Event: Connected to Receiver Handler
+On: 2011-10-18 18:09:05.495001 Event: Receiver Handler respond
+On: 2011-10-18 18:09:05.506367 Event: Receiver handler : Ready
+On: 2011-10-18 18:09:05.506434 Event: Start Call
+On: 2011-10-18 18:09:05.506518 Event: Waiting Feedback
+On: 2011-10-18 18:09:20.506711 Event: Test Failed
+On: 2011-10-18 18:09:24.547668 Event:
+On: 2011-10-18 18:09:24.547729 Event: init Caller
+On: 2011-10-18 18:09:24.547750 Event: GSMRZ3
+On: 2011-10-18 18:09:28.564939 Event: Connected to Caller Handler
+On: 2011-10-18 18:09:44.401668 Event: Caller Handler respond
+On: 2011-10-18 18:09:44.411658 Event: Caller handler : Ready
+On: 2011-10-18 18:09:44.411698 Event: init Receiver
+On: 2011-10-18 18:09:44.411720 Event: GSMRZ1
+On: 2011-10-18 18:09:46.416673 Event: Connected to Receiver Handler
+On: 2011-10-18 18:09:46.416955 Event: Receiver Handler respond
+On: 2011-10-18 18:09:46.417141 Event: Receiver handler : Ready
+On: 2011-10-18 18:09:46.417170 Event: Start Call
+On: 2011-10-18 18:09:46.421878 Event: Waiting Feedback
+On: 2011-10-18 18:09:51.914316 Event: Test Succeed
+
+
+------------------STARTED THE LOGGING 2011-10-18 18:11:26.350080 ------------------
+On: 2011-10-18 18:11:26.350158 Event: init Caller
+On: 2011-10-18 18:11:26.350183 Event: GSMRZ1
+On: 2011-10-18 18:11:28.365050 Event: Connected to Caller Handler
+On: 2011-10-18 18:11:28.365360 Event: Caller Handler respond
+On: 2011-10-18 18:11:28.365555 Event: Caller handler : Ready
+On: 2011-10-18 18:11:28.365585 Event: init Receiver
+On: 2011-10-18 18:11:28.365604 Event: GSMRZ3
+On: 2011-10-18 18:11:32.372700 Event: Connected to Receiver Handler
+On: 2011-10-18 18:11:47.398325 Event: Receiver Handler respond
+On: 2011-10-18 18:11:47.408429 Event: Receiver handler : Ready
+On: 2011-10-18 18:11:47.408466 Event: Start Call
+On: 2011-10-18 18:11:47.408534 Event: Waiting Feedback
+On: 2011-10-18 18:12:02.408725 Event: Test Failed
+On: 2011-10-18 18:12:06.460491 Event:
+On: 2011-10-18 18:12:06.460553 Event: init Caller
+On: 2011-10-18 18:12:06.460573 Event: GSMRZ3
+On: 2011-10-18 18:12:10.466271 Event: Connected to Caller Handler
+On: 2011-10-18 18:12:26.308148 Event: Caller Handler respond
+On: 2011-10-18 18:12:26.318576 Event: Caller handler : Ready
+On: 2011-10-18 18:12:26.318614 Event: init Receiver
+On: 2011-10-18 18:12:26.318635 Event: GSMRZ1
+On: 2011-10-18 18:12:28.323549 Event: Connected to Receiver Handler
+On: 2011-10-18 18:12:28.323827 Event: Receiver Handler respond
+On: 2011-10-18 18:12:28.324009 Event: Receiver handler : Ready
+On: 2011-10-18 18:12:28.324037 Event: Start Call
+On: 2011-10-18 18:12:28.325912 Event: Waiting Feedback
+On: 2011-10-18 18:12:32.757497 Event: Test Succeed
+
+
+------------------STARTED THE LOGGING 2011-10-18 19:40:31.908684 ------------------
+On: 2011-10-18 19:40:31.908768 Event: init Caller
+On: 2011-10-18 19:40:31.908794 Event: GSMRZ1
+On: 2011-10-18 19:40:33.914293 Event: Connected to Caller Handler
+On: 2011-10-18 19:40:33.914598 Event: Caller Handler respond
+On: 2011-10-18 19:40:33.914782 Event: Caller handler : Ready
+On: 2011-10-18 19:40:33.914812 Event: init Receiver
+On: 2011-10-18 19:40:33.914831 Event: GSMRZ3
+On: 2011-10-18 19:41:07.948812 Event: Connected to Receiver Handler
+On: 2011-10-18 19:41:07.953824 Event: 998 General Handler Error: Could not connect Destination handler
+On: 2011-10-18 19:41:12.006389 Event:
+On: 2011-10-18 19:41:12.006456 Event: init Caller
+On: 2011-10-18 19:41:12.006477 Event: GSMRZ3
+On: 2011-10-18 19:41:46.040312 Event: Connected to Caller Handler
+On: 2011-10-18 19:41:46.045383 Event: 999 General Handler Error: Could not connect to Caller handler
+
+
+------------------STARTED THE LOGGING 2011-10-18 19:42:04.075012 ------------------
+On: 2011-10-18 19:42:04.075087 Event: init Caller
+On: 2011-10-18 19:42:04.075111 Event: GSMRZ1
+On: 2011-10-18 19:42:06.080332 Event: Connected to Caller Handler
+On: 2011-10-18 19:42:06.080642 Event: Caller Handler respond
+On: 2011-10-18 19:42:06.080837 Event: Caller handler : Ready
+On: 2011-10-18 19:42:06.080868 Event: init Receiver
+On: 2011-10-18 19:42:06.080887 Event: GSMRZ3
+On: 2011-10-18 19:42:40.115210 Event: Connected to Receiver Handler
+On: 2011-10-18 19:42:40.120190 Event: 998 General Handler Error: Could not connect Destination handler
+On: 2011-10-18 19:42:44.172968 Event:
+On: 2011-10-18 19:42:44.173029 Event: init Caller
+On: 2011-10-18 19:42:44.173048 Event: GSMRZ3
+On: 2011-10-18 19:43:18.210190 Event: Connected to Caller Handler
+On: 2011-10-18 19:43:18.215254 Event: 999 General Handler Error: Could not connect to Caller handler
+
+
+------------------STARTED THE LOGGING 2011-10-18 19:46:20.058855 ------------------
+On: 2011-10-18 19:46:20.058934 Event: init Caller
+On: 2011-10-18 19:46:20.058959 Event: GSMRZ1
+On: 2011-10-18 19:46:22.064212 Event: Connected to Caller Handler
+On: 2011-10-18 19:46:22.064516 Event: Caller Handler respond
+On: 2011-10-18 19:46:22.064704 Event: Caller handler : Ready
+On: 2011-10-18 19:46:22.064734 Event: init Receiver
+On: 2011-10-18 19:46:22.064753 Event: GSMRZ3
+On: 2011-10-18 19:46:56.101926 Event: Connected to Receiver Handler
+On: 2011-10-18 19:46:56.109359 Event: Receiver Handler respond
+On: 2011-10-18 19:46:56.112684 Event: Receiver handler : Ready
+On: 2011-10-18 19:46:56.112725 Event: Start Call
+On: 2011-10-18 19:46:56.112799 Event: Waiting Feedback
+On: 2011-10-18 19:47:11.112994 Event: Test Failed
+On: 2011-10-18 19:47:15.166016 Event:
+On: 2011-10-18 19:47:15.166077 Event: init Caller
+On: 2011-10-18 19:47:15.166097 Event: GSMRZ3
+On: 2011-10-18 19:47:49.192308 Event: Connected to Caller Handler
+On: 2011-10-18 19:47:49.200653 Event: Caller Handler respond
+On: 2011-10-18 19:47:49.203351 Event: Caller handler : Ready
+On: 2011-10-18 19:47:49.203416 Event: init Receiver
+On: 2011-10-18 19:47:49.203438 Event: GSMRZ1
+On: 2011-10-18 19:47:51.206610 Event: Connected to Receiver Handler
+On: 2011-10-18 19:47:51.206897 Event: Receiver Handler respond
+On: 2011-10-18 19:47:51.207087 Event: Receiver handler : Ready
+On: 2011-10-18 19:47:51.207117 Event: Start Call
+On: 2011-10-18 19:47:51.209908 Event: Waiting Feedback
+On: 2011-10-18 19:47:56.762367 Event: Test Succeed
+
+
+------------------STARTED THE LOGGING 2011-10-18 19:48:31.868650 ------------------
+On: 2011-10-18 19:48:31.868726 Event: init Caller
+On: 2011-10-18 19:48:31.868751 Event: GSMRZ1
+On: 2011-10-18 19:48:33.874188 Event: Connected to Caller Handler
+On: 2011-10-18 19:48:33.874497 Event: Caller Handler respond
+On: 2011-10-18 19:48:33.874690 Event: Caller handler : Ready
+On: 2011-10-18 19:48:33.874720 Event: init Receiver
+On: 2011-10-18 19:48:33.874739 Event: GSMRZ3
+On: 2011-10-18 19:49:07.884326 Event: Connected to Receiver Handler
+On: 2011-10-18 19:49:07.892241 Event: Receiver Handler respond
+On: 2011-10-18 19:49:07.894807 Event: Receiver handler : Ready
+On: 2011-10-18 19:49:07.894875 Event: Start Call
+On: 2011-10-18 19:49:07.894956 Event: Waiting Feedback
+On: 2011-10-18 19:49:22.895150 Event: Test Failed
+On: 2011-10-18 19:49:26.948564 Event:
+On: 2011-10-18 19:49:26.948628 Event: init Caller
+On: 2011-10-18 19:49:26.948648 Event: GSMRZ3
+On: 2011-10-18 19:50:00.975332 Event: Connected to Caller Handler
+On: 2011-10-18 19:50:00.982386 Event: Caller Handler respond
+On: 2011-10-18 19:50:00.984504 Event: Caller handler : Ready
+On: 2011-10-18 19:50:00.984539 Event: init Receiver
+On: 2011-10-18 19:50:00.984560 Event: GSMRZ1
+On: 2011-10-18 19:50:02.989913 Event: Connected to Receiver Handler
+On: 2011-10-18 19:50:02.990203 Event: Receiver Handler respond
+On: 2011-10-18 19:50:02.990393 Event: Receiver handler : Ready
+On: 2011-10-18 19:50:02.990422 Event: Start Call
+On: 2011-10-18 19:50:02.994149 Event: Waiting Feedback
+On: 2011-10-18 19:50:08.057132 Event: Test Succeed
+
+
+------------------STARTED THE LOGGING 2011-10-18 19:50:50.440299 ------------------
+On: 2011-10-18 19:50:50.440375 Event: init Caller
+On: 2011-10-18 19:50:50.440401 Event: GSMRZ1
+On: 2011-10-18 19:50:52.445688 Event: Connected to Caller Handler
+On: 2011-10-18 19:50:52.446150 Event: Caller Handler respond
+On: 2011-10-18 19:50:52.446384 Event: Caller handler : Ready
+On: 2011-10-18 19:50:52.446410 Event: init Receiver
+On: 2011-10-18 19:50:52.446430 Event: GSMRZ3
+On: 2011-10-18 19:51:24.481366 Event: Connected to Receiver Handler
+On: 2011-10-18 19:51:24.489439 Event: Receiver Handler respond
+On: 2011-10-18 19:51:24.492113 Event: Receiver handler : Ready
+On: 2011-10-18 19:51:24.492182 Event: Start Call
+On: 2011-10-18 19:51:24.492263 Event: Waiting Feedback
+On: 2011-10-18 19:51:39.492452 Event: Test Failed
+On: 2011-10-18 19:51:43.545882 Event:
+On: 2011-10-18 19:51:43.545946 Event: init Caller
+On: 2011-10-18 19:51:43.545966 Event: GSMRZ3
+On: 2011-10-18 19:52:15.580572 Event: Connected to Caller Handler
+On: 2011-10-18 19:52:15.588514 Event: Caller Handler respond
+On: 2011-10-18 19:52:15.591136 Event: Caller handler : Ready
+On: 2011-10-18 19:52:15.591172 Event: init Receiver
+On: 2011-10-18 19:52:15.591193 Event: GSMRZ1
+On: 2011-10-18 19:52:17.596346 Event: Connected to Receiver Handler
+On: 2011-10-18 19:52:17.596628 Event: Receiver Handler respond
+On: 2011-10-18 19:52:17.596808 Event: Receiver handler : Ready
+On: 2011-10-18 19:52:17.596836 Event: Start Call
+On: 2011-10-18 19:52:17.596902 Event: Waiting Feedback
+On: 2011-10-18 19:52:23.148784 Event: Test Succeed
+
+
+------------------STARTED THE LOGGING 2011-10-18 19:53:30.074169 ------------------
+On: 2011-10-18 19:53:30.074251 Event: init Caller
+On: 2011-10-18 19:53:30.074276 Event: GSMRZ1
+On: 2011-10-18 19:53:32.079518 Event: Connected to Caller Handler
+On: 2011-10-18 19:53:32.079819 Event: Caller Handler respond
+On: 2011-10-18 19:53:32.080001 Event: Caller handler : Ready
+On: 2011-10-18 19:53:32.080027 Event: init Receiver
+On: 2011-10-18 19:53:32.080046 Event: GSMRZ3
+On: 2011-10-18 19:53:54.105189 Event: Connected to Receiver Handler
+On: 2011-10-18 19:53:54.113747 Event: Receiver Handler respond
+On: 2011-10-18 19:53:54.116129 Event: Receiver handler : Ready
+On: 2011-10-18 19:53:54.116189 Event: Start Call
+On: 2011-10-18 19:53:54.116269 Event: Waiting Feedback
+On: 2011-10-18 19:54:09.116481 Event: Test Failed
+On: 2011-10-18 19:54:13.178109 Event:
+On: 2011-10-18 19:54:13.178174 Event: init Caller
+On: 2011-10-18 19:54:13.178194 Event: GSMRZ3
+On: 2011-10-18 19:54:35.202999 Event: Connected to Caller Handler
+On: 2011-10-18 19:54:35.211842 Event: Caller Handler respond
+On: 2011-10-18 19:54:35.214071 Event: Caller handler : Ready
+On: 2011-10-18 19:54:35.214106 Event: init Receiver
+On: 2011-10-18 19:54:35.214128 Event: GSMRZ1
+On: 2011-10-18 19:54:37.219289 Event: Connected to Receiver Handler
+On: 2011-10-18 19:54:37.219578 Event: Receiver Handler respond
+On: 2011-10-18 19:54:37.219765 Event: Receiver handler : Ready
+On: 2011-10-18 19:54:37.219795 Event: Start Call
+On: 2011-10-18 19:54:37.219863 Event: Waiting Feedback
+On: 2011-10-18 19:54:42.724903 Event: Test Succeed
+
+
+------------------STARTED THE LOGGING 2011-10-18 19:54:58.248372 ------------------
+On: 2011-10-18 19:54:58.248447 Event: init Caller
+On: 2011-10-18 19:54:58.248471 Event: GSMRZ1
+On: 2011-10-18 19:55:00.253802 Event: Connected to Caller Handler
+On: 2011-10-18 19:55:00.254131 Event: Caller Handler respond
+On: 2011-10-18 19:55:00.254360 Event: Caller handler : Ready
+On: 2011-10-18 19:55:00.254391 Event: init Receiver
+On: 2011-10-18 19:55:00.254409 Event: GSMRZ3
+On: 2011-10-18 19:55:22.278361 Event: Connected to Receiver Handler
+On: 2011-10-18 19:55:22.286281 Event: Receiver Handler respond
+On: 2011-10-18 19:55:22.289141 Event: Receiver handler : Ready
+On: 2011-10-18 19:55:22.289182 Event: Start Call
+On: 2011-10-18 19:55:22.293677 Event: Waiting Feedback
+On: 2011-10-18 19:55:27.025815 Event: Test Succeed
+On: 2011-10-18 19:55:31.069547 Event:
+On: 2011-10-18 19:55:31.069608 Event: init Caller
+On: 2011-10-18 19:55:31.069628 Event: GSMRZ3
+On: 2011-10-18 19:55:53.090433 Event: Connected to Caller Handler
+On: 2011-10-18 19:55:53.098348 Event: Caller Handler respond
+On: 2011-10-18 19:55:53.100627 Event: Caller handler : Ready
+On: 2011-10-18 19:55:53.100662 Event: init Receiver
+On: 2011-10-18 19:55:53.100683 Event: GSMRZ1
+On: 2011-10-18 19:55:55.105915 Event: Connected to Receiver Handler
+On: 2011-10-18 19:55:55.106200 Event: Receiver Handler respond
+On: 2011-10-18 19:55:55.106380 Event: Receiver handler : Ready
+On: 2011-10-18 19:55:55.106409 Event: Start Call
+On: 2011-10-18 19:55:55.109790 Event: Waiting Feedback
+On: 2011-10-18 19:56:00.587276 Event: Test Succeed
+
+
+------------------STARTED THE LOGGING 2011-10-18 19:56:15.687993 ------------------
+On: 2011-10-18 19:56:15.688069 Event: init Caller
+On: 2011-10-18 19:56:15.688094 Event: GSMRZ1
+On: 2011-10-18 19:56:17.693358 Event: Connected to Caller Handler
+On: 2011-10-18 19:56:17.693824 Event: Caller Handler respond
+On: 2011-10-18 19:56:17.694080 Event: Caller handler : Ready
+On: 2011-10-18 19:56:17.694107 Event: init Receiver
+On: 2011-10-18 19:56:17.694126 Event: GSMRZ2
+On: 2011-10-18 19:56:21.701110 Event: Cannt connect to Receiver
+On: 2011-10-18 19:56:21.701171 Event: 998 General Handler Error: Could not connect Destination handler
+On: 2011-10-18 19:56:25.752505 Event:
+On: 2011-10-18 19:56:25.752567 Event: init Caller
+On: 2011-10-18 19:56:25.752587 Event: GSMRZ2
+On: 2011-10-18 19:56:29.762281 Event: Connected to Caller Handler
+On: 2011-10-18 19:56:29.778122 Event: Caller Handler respond
+On: 2011-10-18 19:56:29.786353 Event: Caller handler : Ready
+On: 2011-10-18 19:56:29.786388 Event: init Receiver
+On: 2011-10-18 19:56:29.786410 Event: GSMRZ1
+On: 2011-10-18 19:56:31.790614 Event: Connected to Receiver Handler
+On: 2011-10-18 19:56:31.790900 Event: Receiver Handler respond
+On: 2011-10-18 19:56:31.791086 Event: Receiver handler : Ready
+On: 2011-10-18 19:56:31.791117 Event: Start Call
+On: 2011-10-18 19:56:31.793907 Event: Waiting Feedback
+On: 2011-10-18 19:56:36.164627 Event: Test Succeed
+
+
+------------------STARTED THE LOGGING 2011-10-18 19:57:24.372506 ------------------
+On: 2011-10-18 19:57:24.372579 Event: init Caller
+On: 2011-10-18 19:57:24.372603 Event: GSMRZ1
+On: 2011-10-18 19:57:26.377848 Event: Connected to Caller Handler
+On: 2011-10-18 19:57:26.378152 Event: Caller Handler respond
+On: 2011-10-18 19:57:26.378338 Event: Caller handler : Ready
+On: 2011-10-18 19:57:26.378368 Event: init Receiver
+On: 2011-10-18 19:57:26.378387 Event: GSMRZ2
+On: 2011-10-18 19:57:30.383835 Event: Connected to Receiver Handler
+On: 2011-10-18 19:57:30.399764 Event: Receiver Handler respond
+On: 2011-10-18 19:57:30.408115 Event: Receiver handler : Ready
+On: 2011-10-18 19:57:30.408149 Event: Start Call
+On: 2011-10-18 19:57:30.413689 Event: Waiting Feedback
+On: 2011-10-18 19:57:33.997799 Event: Test Succeed
+On: 2011-10-18 19:57:38.049232 Event:
+On: 2011-10-18 19:57:38.049297 Event: init Caller
+On: 2011-10-18 19:57:38.049317 Event: GSMRZ2
+On: 2011-10-18 19:57:42.057700 Event: Connected to Caller Handler
+On: 2011-10-18 19:57:42.073628 Event: Caller Handler respond
+On: 2011-10-18 19:57:42.081901 Event: Caller handler : Ready
+On: 2011-10-18 19:57:42.081940 Event: init Receiver
+On: 2011-10-18 19:57:42.081961 Event: GSMRZ1
+On: 2011-10-18 19:57:44.087077 Event: Connected to Receiver Handler
+On: 2011-10-18 19:57:44.087354 Event: Receiver Handler respond
+On: 2011-10-18 19:57:44.087540 Event: Receiver handler : Ready
+On: 2011-10-18 19:57:44.087569 Event: Start Call
+On: 2011-10-18 19:57:44.089907 Event: Waiting Feedback
+On: 2011-10-18 19:57:48.425671 Event: Test Succeed
+
+
+------------------STARTED THE LOGGING 2011-10-18 19:59:44.461834 ------------------
+On: 2011-10-18 19:59:44.461910 Event: init Caller
+On: 2011-10-18 19:59:44.461936 Event: GSMRZ3
+On: 2011-10-18 20:00:06.489029 Event: Connected to Caller Handler
+On: 2011-10-18 20:00:06.498103 Event: Caller Handler respond
+On: 2011-10-18 20:00:06.505458 Event: Caller handler : Ready
+On: 2011-10-18 20:00:06.505503 Event: init Receiver
+On: 2011-10-18 20:00:06.505525 Event: GSMRZ2
+On: 2011-10-18 20:00:10.512396 Event: Connected to Receiver Handler
+On: 2011-10-18 20:00:10.528410 Event: Receiver Handler respond
+On: 2011-10-18 20:00:10.536636 Event: Receiver handler : Ready
+On: 2011-10-18 20:00:10.536673 Event: Start Call
+On: 2011-10-18 20:00:10.536732 Event: Waiting Feedback
+On: 2011-10-18 20:00:15.957855 Event: Test Succeed
+On: 2011-10-18 20:00:20.011138 Event:
+On: 2011-10-18 20:00:20.011205 Event: init Caller
+On: 2011-10-18 20:00:20.011225 Event: GSMRZ1
+On: 2011-10-18 20:00:22.016264 Event: Connected to Caller Handler
+On: 2011-10-18 20:00:22.016548 Event: Caller Handler respond
+On: 2011-10-18 20:00:22.016739 Event: Caller handler : Ready
+On: 2011-10-18 20:00:22.016769 Event: init Receiver
+On: 2011-10-18 20:00:22.016788 Event: GSMRZ3
+On: 2011-10-18 20:00:44.038223 Event: Connected to Receiver Handler
+On: 2011-10-18 20:00:44.046655 Event: Receiver Handler respond
+On: 2011-10-18 20:00:44.049070 Event: Receiver handler : Ready
+On: 2011-10-18 20:00:44.049105 Event: Start Call
+On: 2011-10-18 20:00:44.051367 Event: Waiting Feedback
+On: 2011-10-18 20:00:47.576395 Event: Test Succeed
+On: 2011-10-18 20:00:51.630732 Event:
+On: 2011-10-18 20:00:51.630796 Event: init Caller
+On: 2011-10-18 20:00:51.630817 Event: GSMRZ1
+On: 2011-10-18 20:00:53.641472 Event: Connected to Caller Handler
+On: 2011-10-18 20:00:53.642144 Event: Caller Handler respond
+On: 2011-10-18 20:00:53.642601 Event: Caller handler : Ready
+On: 2011-10-18 20:00:53.642641 Event: init Receiver
+On: 2011-10-18 20:00:53.642660 Event: GSMRZ2
+On: 2011-10-18 20:00:57.649584 Event: Connected to Receiver Handler
+On: 2011-10-18 20:00:57.665537 Event: Receiver Handler respond
+On: 2011-10-18 20:00:57.673716 Event: Receiver handler : Ready
+On: 2011-10-18 20:00:57.673752 Event: Start Call
+On: 2011-10-18 20:00:57.677699 Event: Waiting Feedback
+On: 2011-10-18 20:01:01.301817 Event: Test Succeed
+On: 2011-10-18 20:01:05.352997 Event:
+On: 2011-10-18 20:01:05.353064 Event: init Caller
+On: 2011-10-18 20:01:05.353085 Event: GSMRZ2
+On: 2011-10-18 20:01:09.361533 Event: Connected to Caller Handler
+On: 2011-10-18 20:01:09.377182 Event: Caller Handler respond
+On: 2011-10-18 20:01:09.385288 Event: Caller handler : Ready
+On: 2011-10-18 20:01:09.385322 Event: init Receiver
+On: 2011-10-18 20:01:09.385344 Event: GSMRZ1
+On: 2011-10-18 20:01:11.390435 Event: Connected to Receiver Handler
+On: 2011-10-18 20:01:11.390721 Event: Receiver Handler respond
+On: 2011-10-18 20:01:11.390910 Event: Receiver handler : Ready
+On: 2011-10-18 20:01:11.390940 Event: Start Call
+On: 2011-10-18 20:01:11.393790 Event: Waiting Feedback
+On: 2011-10-18 20:01:15.661353 Event: Test Succeed
+On: 2011-10-18 20:01:19.712449 Event:
+On: 2011-10-18 20:01:19.712516 Event: init Caller
+On: 2011-10-18 20:01:19.712536 Event: GSMRZ3
+On: 2011-10-18 20:01:41.738226 Event: Connected to Caller Handler
+On: 2011-10-18 20:01:41.746013 Event: Caller Handler respond
+On: 2011-10-18 20:01:41.748130 Event: Caller handler : Ready
+On: 2011-10-18 20:01:41.748163 Event: init Receiver
+On: 2011-10-18 20:01:41.748185 Event: GSMRZ1
+On: 2011-10-18 20:01:43.753528 Event: Connected to Receiver Handler
+On: 2011-10-18 20:01:43.753880 Event: Receiver Handler respond
+On: 2011-10-18 20:01:43.754214 Event: Receiver handler : Ready
+On: 2011-10-18 20:01:43.754255 Event: Start Call
+On: 2011-10-18 20:01:43.757870 Event: Waiting Feedback
+On: 2011-10-18 20:01:54.297386 Event: Test Succeed
+On: 2011-10-18 20:01:58.341936 Event:
+On: 2011-10-18 20:01:58.342003 Event: init Caller
+On: 2011-10-18 20:01:58.342024 Event: GSMRZ2
+On: 2011-10-18 20:02:02.356980 Event: Connected to Caller Handler
+On: 2011-10-18 20:02:02.372562 Event: Caller Handler respond
+On: 2011-10-18 20:02:02.380815 Event: Caller handler : Ready
+On: 2011-10-18 20:02:02.380875 Event: init Receiver
+On: 2011-10-18 20:02:02.380897 Event: GSMRZ3
+On: 2011-10-18 20:02:24.386212 Event: Connected to Receiver Handler
+On: 2011-10-18 20:02:24.394613 Event: Receiver Handler respond
+On: 2011-10-18 20:02:24.397084 Event: Receiver handler : Ready
+On: 2011-10-18 20:02:24.397118 Event: Start Call
+On: 2011-10-18 20:02:24.397179 Event: Waiting Feedback
+On: 2011-10-18 20:02:39.397369 Event: Test Failed
+
+
+------------------STARTED THE LOGGING 2011-10-20 11:53:00.078855 ------------------
+On: 2011-10-20 11:53:00.078936 Event: init Caller
+On: 2011-10-20 11:53:00.078962 Event: GSMRZ2
+On: 2011-10-20 11:53:04.096635 Event: Cannt connect to Caller
+On: 2011-10-20 11:53:04.096702 Event: 999 General Handler Error: Could not connect to Caller handler
+
+
+------------------STARTED THE LOGGING 2011-10-20 11:53:30.186820 ------------------
+On: 2011-10-20 11:53:30.186897 Event: init Caller
+On: 2011-10-20 11:53:30.186923 Event: GSMRZ2
+On: 2011-10-20 11:53:34.201998 Event: Connected to Caller Handler
+On: 2011-10-20 11:53:34.214213 Event: 999 General Handler Error: Could not connect to Caller handler
+
+
+------------------STARTED THE LOGGING 2011-10-20 11:54:53.400752 ------------------
+On: 2011-10-20 11:54:53.400826 Event: init Caller
+On: 2011-10-20 11:54:53.400851 Event: GSMRZ2
+On: 2011-10-20 11:55:15.422537 Event: Connected to Caller Handler
+On: 2011-10-20 11:55:15.428592 Event: 999 General Handler Error: Could not connect to Caller handler
+
+
+------------------STARTED THE LOGGING 2011-10-20 11:57:08.726171 ------------------
+On: 2011-10-20 11:57:08.726253 Event: init Caller
+On: 2011-10-20 11:57:08.726279 Event: GSMRZ1
+On: 2011-10-20 11:57:10.737162 Event: Connected to Caller Handler
+On: 2011-10-20 11:57:10.737467 Event: Caller Handler respond
+On: 2011-10-20 11:57:10.737658 Event: Caller handler : Ready
+On: 2011-10-20 11:57:10.737688 Event: init Receiver
+On: 2011-10-20 11:57:10.737858 Event: GSMRZ3
+On: 2011-10-20 11:57:32.766341 Event: Connected to Receiver Handler
+On: 2011-10-20 11:57:32.773208 Event: 998 General Handler Error: Could not connect Destination handler
+
+
+------------------STARTED THE LOGGING 2011-10-20 11:58:51.814166 ------------------
+On: 2011-10-20 11:58:51.814248 Event: init Caller
+On: 2011-10-20 11:58:51.814272 Event: GSMRZ1
+On: 2011-10-20 11:58:53.818935 Event: Connected to Caller Handler
+On: 2011-10-20 11:58:53.819236 Event: Caller Handler respond
+On: 2011-10-20 11:58:53.819421 Event: Caller handler : Ready
+On: 2011-10-20 11:58:53.819450 Event: init Receiver
+On: 2011-10-20 11:58:53.819469 Event: GSMRZ3
+On: 2011-10-20 11:59:15.848612 Event: Connected to Receiver Handler
+On: 2011-10-20 11:59:15.855188 Event: 998 General Handler Error: Could not connect Destination handler
+
+
+------------------STARTED THE LOGGING 2011-10-20 12:00:03.954593 ------------------
+On: 2011-10-20 12:00:03.954674 Event: init Caller
+On: 2011-10-20 12:00:03.954701 Event: GSMRZ1
+On: 2011-10-20 12:00:05.962418 Event: Connected to Caller Handler
+On: 2011-10-20 12:00:05.962723 Event: Caller Handler respond
+On: 2011-10-20 12:00:05.962906 Event: Caller handler : Ready
+On: 2011-10-20 12:00:05.962936 Event: init Receiver
+On: 2011-10-20 12:00:05.962955 Event: GSMRZ3
+On: 2011-10-20 12:00:27.975790 Event: Connected to Receiver Handler
+On: 2011-10-20 12:00:27.983671 Event: Receiver Handler respond
+On: 2011-10-20 12:00:27.985942 Event: Receiver handler : Ready
+On: 2011-10-20 12:00:27.985977 Event: Start Call
+On: 2011-10-20 12:00:27.989747 Event: Waiting Feedback
+On: 2011-10-20 12:00:32.697853 Event: Test Succeed
+
+
+------------------STARTED THE LOGGING 2011-10-20 12:00:49.610195 ------------------
+On: 2011-10-20 12:00:49.610272 Event: init Caller
+On: 2011-10-20 12:00:49.610297 Event: GSMRZ1
+On: 2011-10-20 12:00:51.621430 Event: Connected to Caller Handler
+On: 2011-10-20 12:00:51.621813 Event: Caller Handler respond
+On: 2011-10-20 12:00:51.622029 Event: Caller handler : Ready
+On: 2011-10-20 12:00:51.622060 Event: init Receiver
+On: 2011-10-20 12:00:51.622079 Event: GSMRZ3
+On: 2011-10-20 12:01:13.652606 Event: Connected to Receiver Handler
+On: 2011-10-20 12:01:13.660620 Event: Receiver Handler respond
+On: 2011-10-20 12:01:13.662857 Event: Receiver handler : Ready
+On: 2011-10-20 12:01:13.662892 Event: Start Call
+On: 2011-10-20 12:01:13.665754 Event: Waiting Feedback
+On: 2011-10-20 12:01:18.333862 Event: Test Succeed
+
+
+------------------STARTED THE LOGGING 2011-10-20 12:01:39.976389 ------------------
+On: 2011-10-20 12:01:39.976467 Event: init Caller
+On: 2011-10-20 12:01:39.976493 Event: GSMRZ2
+On: 2011-10-20 12:02:02.001575 Event: Connected to Caller Handler
+On: 2011-10-20 12:02:02.007417 Event: 999 General Handler Error: Could not connect to Caller handler
+
+
+------------------STARTED THE LOGGING 2011-10-20 12:02:25.180283 ------------------
+On: 2011-10-20 12:02:25.180365 Event: init Caller
+On: 2011-10-20 12:02:25.180391 Event: GSMRZ2
+On: 2011-10-20 12:02:47.203776 Event: Connected to Caller Handler
+On: 2011-10-20 12:02:47.223857 Event: Caller Handler respond
+On: 2011-10-20 12:02:47.234714 Event: Caller handler : Ready
+On: 2011-10-20 12:02:47.234782 Event: init Receiver
+On: 2011-10-20 12:02:47.234805 Event: GSMRZ3
+On: 2011-10-20 12:03:09.251033 Event: Connected to Receiver Handler
+On: 2011-10-20 12:03:09.259120 Event: Receiver Handler respond
+On: 2011-10-20 12:03:09.261470 Event: Receiver handler : Ready
+On: 2011-10-20 12:03:09.261506 Event: Start Call
+On: 2011-10-20 12:03:09.261562 Event: Waiting Feedback
+On: 2011-10-20 12:03:24.261780 Event: Test Failed
+
+
+------------------STARTED THE LOGGING 2011-10-20 12:03:44.133972 ------------------
+On: 2011-10-20 12:03:44.134050 Event: init Caller
+On: 2011-10-20 12:03:44.134076 Event: GSMRZ2
+On: 2011-10-20 12:04:06.160928 Event: Connected to Caller Handler
+On: 2011-10-20 12:04:06.179936 Event: Caller Handler respond
+On: 2011-10-20 12:04:06.189894 Event: Caller handler : Ready
+On: 2011-10-20 12:04:06.189932 Event: init Receiver
+On: 2011-10-20 12:04:06.189953 Event: GSMRZ3
+On: 2011-10-20 12:04:28.214852 Event: Connected to Receiver Handler
+On: 2011-10-20 12:04:28.235059 Event: Receiver Handler respond
+On: 2011-10-20 12:04:28.246209 Event: Receiver handler : Ready
+On: 2011-10-20 12:04:28.246245 Event: Start Call
+On: 2011-10-20 12:04:28.246302 Event: Waiting Feedback
+On: 2011-10-20 12:04:43.246498 Event: Test Failed
+
+
+------------------STARTED THE LOGGING 2011-10-20 12:09:14.727075 ------------------
+On: 2011-10-20 12:09:14.727150 Event: init Caller
+On: 2011-10-20 12:09:14.727175 Event: GSMRZ2
+On: 2011-10-20 12:09:18.732584 Event: Connected to Caller Handler
+On: 2011-10-20 12:09:18.755570 Event: Caller Handler respond
+On: 2011-10-20 12:09:18.768947 Event: Caller handler : Ready
+On: 2011-10-20 12:09:18.768988 Event: init Receiver
+On: 2011-10-20 12:09:18.769009 Event: GSMRZ3
+On: 2011-10-20 12:09:40.794838 Event: Connected to Receiver Handler
+On: 2011-10-20 12:09:40.814910 Event: Receiver Handler respond
+On: 2011-10-20 12:09:40.825635 Event: Receiver handler : Ready
+On: 2011-10-20 12:09:40.825691 Event: Start Call
+On: 2011-10-20 12:09:40.825783 Event: Waiting Feedback
+On: 2011-10-20 12:09:55.825971 Event: Test Failed
+
+
+------------------STARTED THE LOGGING 2011-10-20 12:10:53.482082 ------------------
+On: 2011-10-20 12:10:53.482160 Event: init Caller
+On: 2011-10-20 12:10:53.482185 Event: GSMRZ2
+On: 2011-10-20 12:10:57.496102 Event: Connected to Caller Handler
+On: 2011-10-20 12:10:57.517155 Event: Caller Handler respond
+On: 2011-10-20 12:10:57.529010 Event: Caller handler : Ready
+On: 2011-10-20 12:10:57.529078 Event: init Receiver
+On: 2011-10-20 12:10:57.529099 Event: GSMRZ3
+On: 2011-10-20 12:11:19.554025 Event: Connected to Receiver Handler
+On: 2011-10-20 12:11:19.571054 Event: Receiver Handler respond
+On: 2011-10-20 12:11:19.580995 Event: Receiver handler : Ready
+On: 2011-10-20 12:11:19.581032 Event: Start Call
+On: 2011-10-20 12:11:19.581090 Event: Waiting Feedback
+On: 2011-10-20 12:11:34.581304 Event: Test Failed
+
+
+------------------STARTED THE LOGGING 2011-10-20 12:20:04.023329 ------------------
+On: 2011-10-20 12:20:04.023407 Event: init Caller
+On: 2011-10-20 12:20:04.023433 Event: GSMRZ2
+On: 2011-10-20 12:20:08.040402 Event: Connected to Caller Handler
+On: 2011-10-20 12:20:08.049007 Event: Caller Handler respond
+On: 2011-10-20 12:20:08.051328 Event: Caller handler : Ready
+On: 2011-10-20 12:20:08.051365 Event: init Receiver
+On: 2011-10-20 12:20:08.051387 Event: GSMRZ3
+On: 2011-10-20 12:20:30.070354 Event: Connected to Receiver Handler
+On: 2011-10-20 12:20:30.078430 Event: Receiver Handler respond
+On: 2011-10-20 12:20:30.081881 Event: Receiver handler : Ready
+On: 2011-10-20 12:20:30.081947 Event: Start Call
+On: 2011-10-20 12:20:30.082015 Event: Waiting Feedback
+On: 2011-10-20 12:20:45.082255 Event: Test Failed
+
+
+------------------STARTED THE LOGGING 2011-10-20 12:22:45.596509 ------------------
+On: 2011-10-20 12:22:45.596589 Event: init Caller
+On: 2011-10-20 12:22:45.596615 Event: GSMRZ2
+On: 2011-10-20 12:22:50.604653 Event: Connected to Caller Handler
+On: 2011-10-20 12:22:50.612394 Event: Caller Handler respond
+On: 2011-10-20 12:22:50.614769 Event: Caller handler : Ready
+On: 2011-10-20 12:22:53.618471 Event: Cannt connect to Receiver
+On: 2011-10-20 12:22:53.618523 Event: 998 General Handler Error: Could not connect Destination handler
+
+
+------------------STARTED THE LOGGING 2011-10-20 12:24:16.865396 ------------------
+On: 2011-10-20 12:24:16.865476 Event: init Caller
+On: 2011-10-20 12:24:16.865502 Event: GSMRZ2
+On: 2011-10-20 12:24:23.875671 Event: Connected to Caller Handler
+On: 2011-10-20 12:24:23.883315 Event: Caller Handler respond
+On: 2011-10-20 12:24:23.886590 Event: Caller handler : Ready
+On: 2011-10-20 12:24:23.886650 Event: init Receiver
+On: 2011-10-20 12:24:23.886674 Event: GSMRZ3
+On: 2011-10-20 12:24:30.895387 Event: Connected to Receiver Handler
+On: 2011-10-20 12:24:30.904337 Event: Receiver Handler respond
+On: 2011-10-20 12:24:30.906886 Event: Receiver handler : Ready
+On: 2011-10-20 12:24:30.906942 Event: Start Call
+On: 2011-10-20 12:24:30.907009 Event: Waiting Feedback
+On: 2011-10-20 12:24:35.331995 Event: Test Succeed
+
+
+------------------STARTED THE LOGGING 2011-10-20 12:25:32.486985 ------------------
+On: 2011-10-20 12:25:32.487059 Event: init Caller
+On: 2011-10-20 12:25:32.487083 Event: GSMRZ2
+On: 2011-10-20 12:25:39.495585 Event: Connected to Caller Handler
+On: 2011-10-20 12:25:39.503455 Event: Caller Handler respond
+On: 2011-10-20 12:25:39.506642 Event: Caller handler : Ready
+On: 2011-10-20 12:25:39.506686 Event: init Receiver
+On: 2011-10-20 12:25:39.506707 Event: GSMRZ3
+On: 2011-10-20 12:25:46.516488 Event: Connected to Receiver Handler
+On: 2011-10-20 12:25:46.523684 Event: Receiver Handler respond
+On: 2011-10-20 12:25:46.525975 Event: Receiver handler : Ready
+On: 2011-10-20 12:25:46.526030 Event: Start Call
+On: 2011-10-20 12:25:46.526094 Event: Waiting Feedback
+On: 2011-10-20 12:25:51.952660 Event: Test Succeed
+
+
+------------------STARTED THE LOGGING 2011-10-20 12:27:55.960653 ------------------
+On: 2011-10-20 12:27:55.960730 Event: init Caller
+On: 2011-10-20 12:27:55.960754 Event: unisip
+On: 2011-10-20 12:27:57.965779 Event: Connected to Caller Handler
+On: 2011-10-20 12:27:57.966188 Event: Caller Handler respond
+On: 2011-10-20 12:27:57.967325 Event: Caller handler : Ready
+On: 2011-10-20 12:27:57.967366 Event: init Receiver
+On: 2011-10-20 12:27:57.967387 Event: GSMRZ1
+On: 2011-10-20 12:27:59.970656 Event: Connected to Receiver Handler
+On: 2011-10-20 12:27:59.970936 Event: Receiver Handler respond
+On: 2011-10-20 12:27:59.971115 Event: Receiver handler : Ready
+On: 2011-10-20 12:27:59.971143 Event: Start Call
+On: 2011-10-20 12:27:59.971195 Event: Waiting Feedback
+On: 2011-10-20 12:28:14.971357 Event: Test Failed
+
+
+------------------STARTED THE LOGGING 2011-10-20 12:30:02.720324 ------------------
+On: 2011-10-20 12:30:02.720401 Event: init Caller
+On: 2011-10-20 12:30:02.720426 Event: unisip
+On: 2011-10-20 12:30:04.725627 Event: Connected to Caller Handler
+On: 2011-10-20 12:30:04.725989 Event: Caller Handler respond
+On: 2011-10-20 12:30:04.727094 Event: Caller handler : Ready
+On: 2011-10-20 12:30:04.727133 Event: init Receiver
+On: 2011-10-20 12:30:04.727155 Event: GSMRZ2
+On: 2011-10-20 12:30:11.735455 Event: Connected to Receiver Handler
+On: 2011-10-20 12:30:11.742413 Event: Receiver Handler respond
+On: 2011-10-20 12:30:11.745414 Event: Receiver handler : Ready
+On: 2011-10-20 12:30:11.745479 Event: Start Call
+On: 2011-10-20 12:30:11.745548 Event: Waiting Feedback
+On: 2011-10-20 12:30:26.745741 Event: Test Failed
+On: 2011-10-20 12:30:30.792210 Event:
+On: 2011-10-20 12:30:30.792270 Event: init Caller
+On: 2011-10-20 12:30:30.792290 Event: GSMRZ1
+On: 2011-10-20 12:30:32.797371 Event: Connected to Caller Handler
+On: 2011-10-20 12:30:32.797642 Event: Caller Handler respond
+On: 2011-10-20 12:30:32.797878 Event: Caller handler : Ready
+On: 2011-10-20 12:30:32.797906 Event: init Receiver
+On: 2011-10-20 12:30:32.797925 Event: GSMExt.Eplus
+On: 2011-10-20 12:30:34.803166 Event: Connected to Receiver Handler
+On: 2011-10-20 12:30:34.803448 Event: Receiver Handler respond
+On: 2011-10-20 12:30:34.803629 Event: Receiver handler : Ready
+On: 2011-10-20 12:30:34.803658 Event: Start Call
+On: 2011-10-20 12:30:34.809742 Event: Waiting Feedback
+On: 2011-10-20 12:30:49.809940 Event: Test Succeed
+On: 2011-10-20 12:30:53.911984 Event:
+On: 2011-10-20 12:30:53.912047 Event: init Caller
+On: 2011-10-20 12:30:53.912068 Event: landline
+On: 2011-10-20 12:30:55.916898 Event: Connected to Caller Handler
+On: 2011-10-20 12:30:55.917282 Event: Caller Handler respond
+On: 2011-10-20 12:30:55.922337 Event: Caller handler : Ready
+On: 2011-10-20 12:30:55.922379 Event: init Receiver
+On: 2011-10-20 12:30:55.922400 Event: GSMRZ3
+On: 2011-10-20 12:31:02.930267 Event: Connected to Receiver Handler
+On: 2011-10-20 12:31:02.937643 Event: Receiver Handler respond
+On: 2011-10-20 12:31:02.939868 Event: Receiver handler : Ready
+On: 2011-10-20 12:31:02.939905 Event: Start Call
+On: 2011-10-20 12:31:02.939963 Event: Waiting Feedback
+On: 2011-10-20 12:31:32.940213 Event: Test Failed
+On: 2011-10-20 12:31:36.984755 Event:
+On: 2011-10-20 12:31:36.984815 Event: init Caller
+On: 2011-10-20 12:31:36.984835 Event: sip
+On: 2011-10-20 12:31:38.989651 Event: Connected to Caller Handler
+On: 2011-10-20 12:31:38.990084 Event: Caller Handler respond
+On: 2011-10-20 12:31:38.990851 Event: Caller handler : Ready
+On: 2011-10-20 12:31:38.990890 Event: init Receiver
+On: 2011-10-20 12:31:38.990911 Event: GSMExt.O2
+On: 2011-10-20 12:31:40.995252 Event: Connected to Receiver Handler
+On: 2011-10-20 12:31:40.995529 Event: Receiver Handler respond
+On: 2011-10-20 12:31:40.995702 Event: Receiver handler : Ready
+On: 2011-10-20 12:31:40.995726 Event: Start Call
+On: 2011-10-20 12:31:40.995779 Event: Waiting Feedback
+On: 2011-10-20 12:31:55.995937 Event: Test Succeed
+On: 2011-10-20 12:32:00.072154 Event:
+On: 2011-10-20 12:32:00.072218 Event: init Caller
+On: 2011-10-20 12:32:00.072238 Event: sip
+On: 2011-10-20 12:32:02.081621 Event: Connected to Caller Handler
+On: 2011-10-20 12:32:02.082058 Event: Caller Handler respond
+On: 2011-10-20 12:32:02.082828 Event: Caller handler : Ready
+On: 2011-10-20 12:32:02.082866 Event: init Receiver
+On: 2011-10-20 12:32:02.082888 Event: GSMExt.Tm
+On: 2011-10-20 12:32:04.086640 Event: Connected to Receiver Handler
+On: 2011-10-20 12:32:04.086916 Event: Receiver Handler respond
+On: 2011-10-20 12:32:04.087095 Event: Receiver handler : Ready
+On: 2011-10-20 12:32:04.087120 Event: Start Call
+On: 2011-10-20 12:32:04.087175 Event: Waiting Feedback
+On: 2011-10-20 12:32:19.087330 Event: Test Succeed
+On: 2011-10-20 12:32:23.165092 Event:
+On: 2011-10-20 12:32:23.165150 Event: init Caller
+On: 2011-10-20 12:32:23.165171 Event: sip
+On: 2011-10-20 12:32:25.171310 Event: Connected to Caller Handler
+On: 2011-10-20 12:32:25.171699 Event: Caller Handler respond
+On: 2011-10-20 12:32:25.172684 Event: Caller handler : Ready
+On: 2011-10-20 12:32:25.172721 Event: init Receiver
+On: 2011-10-20 12:32:25.172743 Event: GSMExt.Voda
+On: 2011-10-20 12:32:27.178161 Event: Connected to Receiver Handler
+On: 2011-10-20 12:32:27.178441 Event: Receiver Handler respond
+On: 2011-10-20 12:32:27.178623 Event: Receiver handler : Ready
+On: 2011-10-20 12:32:27.178652 Event: Start Call
+On: 2011-10-20 12:32:27.178706 Event: Waiting Feedback
+On: 2011-10-20 12:32:42.178863 Event: Test Succeed
+On: 2011-10-20 12:32:46.236638 Event:
+On: 2011-10-20 12:32:46.236698 Event: init Caller
+On: 2011-10-20 12:32:46.236719 Event: sip
+On: 2011-10-20 12:32:48.241499 Event: Connected to Caller Handler
+On: 2011-10-20 12:32:48.241935 Event: Caller Handler respond
+On: 2011-10-20 12:32:48.242705 Event: Caller handler : Ready
+On: 2011-10-20 12:32:48.242743 Event: init Receiver
+On: 2011-10-20 12:32:48.242764 Event: GSMRZ2
+On: 2011-10-20 12:32:55.251324 Event: Connected to Receiver Handler
+On: 2011-10-20 12:32:55.258643 Event: Receiver Handler respond
+On: 2011-10-20 12:32:55.261654 Event: Receiver handler : Ready
+On: 2011-10-20 12:32:55.261697 Event: Start Call
+On: 2011-10-20 12:32:55.261807 Event: Waiting Feedback
+On: 2011-10-20 12:33:10.261985 Event: Test Failed
+On: 2011-10-20 12:33:14.298560 Event:
+On: 2011-10-20 12:33:14.298618 Event: init Caller
+On: 2011-10-20 12:33:14.298638 Event: sip
+On: 2011-10-20 12:33:16.303377 Event: Connected to Caller Handler
+On: 2011-10-20 12:33:16.303767 Event: Caller Handler respond
+On: 2011-10-20 12:33:16.304541 Event: Caller handler : Ready
+On: 2011-10-20 12:33:16.304578 Event: init Receiver
+On: 2011-10-20 12:33:16.304599 Event: GSMRZ3
+On: 2011-10-20 12:33:23.314296 Event: Connected to Receiver Handler
+On: 2011-10-20 12:33:23.321115 Event: Receiver Handler respond
+On: 2011-10-20 12:33:23.324315 Event: Receiver handler : Ready
+On: 2011-10-20 12:33:23.324363 Event: Start Call
+On: 2011-10-20 12:33:23.324503 Event: Waiting Feedback
+On: 2011-10-20 12:33:38.324684 Event: Test Failed
+
+
+------------------STARTED THE LOGGING 2011-10-20 12:40:01.256931 ------------------
+On: 2011-10-20 12:40:01.257006 Event: init Caller
+On: 2011-10-20 12:40:01.257029 Event: unisip
+On: 2011-10-20 12:40:03.262174 Event: Connected to Caller Handler
+On: 2011-10-20 12:40:03.262483 Event: Caller Handler respond
+On: 2011-10-20 12:40:03.263248 Event: Caller handler : Ready
+On: 2011-10-20 12:40:03.263288 Event: init Receiver
+On: 2011-10-20 12:40:03.263309 Event: GSMRZ2
+On: 2011-10-20 12:40:10.271341 Event: Connected to Receiver Handler
+On: 2011-10-20 12:40:10.278595 Event: Receiver Handler respond
+On: 2011-10-20 12:40:10.281335 Event: Receiver handler : Ready
+On: 2011-10-20 12:40:10.281401 Event: Start Call
+On: 2011-10-20 12:40:10.281470 Event: Waiting Feedback
+On: 2011-10-20 12:40:25.281645 Event: Test Failed
+
+
+------------------STARTED THE LOGGING 2011-10-20 12:41:10.171522 ------------------
+On: 2011-10-20 12:41:10.171595 Event: init Caller
+On: 2011-10-20 12:41:10.171619 Event: unisip
+On: 2011-10-20 12:41:12.176855 Event: Connected to Caller Handler
+On: 2011-10-20 12:41:12.178028 Event: Caller Handler respond
+On: 2011-10-20 12:41:12.179193 Event: Caller handler : Ready
+On: 2011-10-20 12:41:12.179232 Event: init Receiver
+On: 2011-10-20 12:41:12.179253 Event: GSMRZ3
+On: 2011-10-20 12:41:19.186584 Event: Connected to Receiver Handler
+On: 2011-10-20 12:41:19.195176 Event: Receiver Handler respond
+On: 2011-10-20 12:41:19.197986 Event: Receiver handler : Ready
+On: 2011-10-20 12:41:19.198042 Event: Start Call
+On: 2011-10-20 12:41:19.198111 Event: Waiting Feedback
+On: 2011-10-20 12:41:34.198284 Event: Test Failed
+On: 2011-10-20 12:41:38.314766 Event:
+On: 2011-10-20 12:41:38.314828 Event: init Caller
+On: 2011-10-20 12:41:38.314847 Event: GSMRZ1
+On: 2011-10-20 12:41:40.320641 Event: Connected to Caller Handler
+On: 2011-10-20 12:41:40.320920 Event: Caller Handler respond
+On: 2011-10-20 12:41:40.321107 Event: Caller handler : Ready
+On: 2011-10-20 12:41:40.321136 Event: init Receiver
+On: 2011-10-20 12:41:40.321154 Event: GSMRZ2
+On: 2011-10-20 12:41:47.330328 Event: Connected to Receiver Handler
+On: 2011-10-20 12:41:47.338314 Event: Receiver Handler respond
+On: 2011-10-20 12:41:47.340759 Event: Receiver handler : Ready
+On: 2011-10-20 12:41:47.340824 Event: Start Call
+On: 2011-10-20 12:41:47.340897 Event: Waiting Feedback
+On: 2011-10-20 12:41:52.017857 Event: Test Succeed
+On: 2011-10-20 12:41:56.095356 Event:
+On: 2011-10-20 12:41:56.095416 Event: init Caller
+On: 2011-10-20 12:41:56.095436 Event: landline
+On: 2011-10-20 12:41:58.098514 Event: Connected to Caller Handler
+On: 2011-10-20 12:41:58.098800 Event: Caller Handler respond
+On: 2011-10-20 12:41:58.101426 Event: Caller handler : Ready
+On: 2011-10-20 12:41:58.101465 Event: init Receiver
+On: 2011-10-20 12:41:58.101486 Event: GSMRZ2
+On: 2011-10-20 12:42:05.113788 Event: Connected to Receiver Handler
+On: 2011-10-20 12:42:05.122067 Event: Receiver Handler respond
+On: 2011-10-20 12:42:05.124439 Event: Receiver handler : Ready
+On: 2011-10-20 12:42:05.124507 Event: Start Call
+On: 2011-10-20 12:42:05.124579 Event: Waiting Feedback
+On: 2011-10-20 12:42:35.124822 Event: Test Failed
+On: 2011-10-20 12:42:39.162759 Event:
+On: 2011-10-20 12:42:39.162818 Event: init Caller
+On: 2011-10-20 12:42:39.162838 Event: GSMRZ2
+On: 2011-10-20 12:42:46.172770 Event: Connected to Caller Handler
+On: 2011-10-20 12:42:46.179251 Event: Caller Handler respond
+On: 2011-10-20 12:42:46.181468 Event: Caller handler : Ready
+On: 2011-10-20 12:42:46.181502 Event: init Receiver
+On: 2011-10-20 12:42:46.181525 Event: sip
+On: 2011-10-20 12:42:48.185438 Event: Connected to Receiver Handler
+On: 2011-10-20 12:42:48.186006 Event: Receiver Handler respond
+On: 2011-10-20 12:42:48.186816 Event: Receiver handler : Ready
+On: 2011-10-20 12:42:48.186855 Event: Start Call
+On: 2011-10-20 12:42:48.187017 Event: Waiting Feedback
+On: 2011-10-20 12:42:51.732161 Event: Test Succeed
+On: 2011-10-20 12:42:55.774487 Event:
+On: 2011-10-20 12:42:55.774544 Event: init Caller
+On: 2011-10-20 12:42:55.774564 Event: sip
+On: 2011-10-20 12:42:57.778196 Event: Connected to Caller Handler
+On: 2011-10-20 12:42:57.778582 Event: Caller Handler respond
+On: 2011-10-20 12:42:57.779656 Event: Caller handler : Ready
+On: 2011-10-20 12:42:57.779691 Event: init Receiver
+On: 2011-10-20 12:42:57.779712 Event: GSMExt.Eplus
+On: 2011-10-20 12:42:59.785135 Event: Connected to Receiver Handler
+On: 2011-10-20 12:42:59.785412 Event: Receiver Handler respond
+On: 2011-10-20 12:42:59.785589 Event: Receiver handler : Ready
+On: 2011-10-20 12:42:59.785618 Event: Start Call
+On: 2011-10-20 12:42:59.785671 Event: Waiting Feedback
+On: 2011-10-20 12:43:14.785839 Event: Test Succeed
+On: 2011-10-20 12:43:18.867325 Event:
+On: 2011-10-20 12:43:18.867387 Event: init Caller
+On: 2011-10-20 12:43:18.867407 Event: sip
+On: 2011-10-20 12:43:20.873539 Event: Connected to Caller Handler
+On: 2011-10-20 12:43:20.873974 Event: Caller Handler respond
+On: 2011-10-20 12:43:20.875066 Event: Caller handler : Ready
+On: 2011-10-20 12:43:20.875104 Event: init Receiver
+On: 2011-10-20 12:43:20.875125 Event: GSMExt.O2
+On: 2011-10-20 12:43:22.878607 Event: Connected to Receiver Handler
+On: 2011-10-20 12:43:22.878888 Event: Receiver Handler respond
+On: 2011-10-20 12:43:22.879068 Event: Receiver handler : Ready
+On: 2011-10-20 12:43:22.879096 Event: Start Call
+On: 2011-10-20 12:43:22.879151 Event: Waiting Feedback
+On: 2011-10-20 12:43:37.879306 Event: Test Succeed
+On: 2011-10-20 12:43:41.956557 Event:
+On: 2011-10-20 12:43:41.956621 Event: init Caller
+On: 2011-10-20 12:43:41.956641 Event: sip
+On: 2011-10-20 12:43:43.962396 Event: Connected to Caller Handler
+On: 2011-10-20 12:43:43.962786 Event: Caller Handler respond
+On: 2011-10-20 12:43:43.963546 Event: Caller handler : Ready
+On: 2011-10-20 12:43:43.963583 Event: init Receiver
+On: 2011-10-20 12:43:43.963604 Event: GSMExt.Tm
+On: 2011-10-20 12:43:45.968849 Event: Connected to Receiver Handler
+On: 2011-10-20 12:43:45.969130 Event: Receiver Handler respond
+On: 2011-10-20 12:43:45.969311 Event: Receiver handler : Ready
+On: 2011-10-20 12:43:45.969339 Event: Start Call
+On: 2011-10-20 12:43:45.969391 Event: Waiting Feedback
+On: 2011-10-20 12:44:00.969547 Event: Test Succeed
+On: 2011-10-20 12:44:05.049945 Event:
+On: 2011-10-20 12:44:05.050010 Event: init Caller
+On: 2011-10-20 12:44:05.050030 Event: sip
+On: 2011-10-20 12:44:07.055099 Event: Connected to Caller Handler
+On: 2011-10-20 12:44:07.055491 Event: Caller Handler respond
+On: 2011-10-20 12:44:07.056262 Event: Caller handler : Ready
+On: 2011-10-20 12:44:07.056300 Event: init Receiver
+On: 2011-10-20 12:44:07.056320 Event: GSMExt.Voda
+On: 2011-10-20 12:44:09.061624 Event: Connected to Receiver Handler
+On: 2011-10-20 12:44:09.061964 Event: Receiver Handler respond
+On: 2011-10-20 12:44:09.062153 Event: Receiver handler : Ready
+On: 2011-10-20 12:44:09.062181 Event: Start Call
+On: 2011-10-20 12:44:09.062235 Event: Waiting Feedback
+On: 2011-10-20 12:44:24.062392 Event: Test Succeed
+
+
+------------------STARTED THE LOGGING 2011-10-20 12:48:49.850201 ------------------
+On: 2011-10-20 12:48:49.850278 Event: init Caller
+On: 2011-10-20 12:48:49.850302 Event: unisip
+On: 2011-10-20 12:48:51.855388 Event: Connected to Caller Handler
+On: 2011-10-20 12:48:51.855787 Event: Caller Handler respond
+On: 2011-10-20 12:48:51.856559 Event: Caller handler : Ready
+On: 2011-10-20 12:48:51.856599 Event: init Receiver
+On: 2011-10-20 12:48:51.856621 Event: GSMRZ3
+On: 2011-10-20 12:48:58.866387 Event: Connected to Receiver Handler
+On: 2011-10-20 12:48:58.874163 Event: Receiver Handler respond
+On: 2011-10-20 12:48:58.877506 Event: Receiver handler : Ready
+On: 2011-10-20 12:48:58.877555 Event: Start Call
+On: 2011-10-20 12:48:58.877617 Event: Waiting Feedback
+On: 2011-10-20 12:49:13.877812 Event: Test Failed
+On: 2011-10-20 12:49:17.923678 Event:
+On: 2011-10-20 12:49:17.923738 Event: init Caller
+On: 2011-10-20 12:49:17.923759 Event: GSMRZ1
+On: 2011-10-20 12:49:19.928920 Event: Connected to Caller Handler
+On: 2011-10-20 12:49:19.929194 Event: Caller Handler respond
+On: 2011-10-20 12:49:19.929384 Event: Caller handler : Ready
+On: 2011-10-20 12:49:19.929412 Event: init Receiver
+On: 2011-10-20 12:49:19.929431 Event: GSMExt.Eplus
+On: 2011-10-20 12:49:21.934721 Event: Connected to Receiver Handler
+On: 2011-10-20 12:49:21.935001 Event: Receiver Handler respond
+On: 2011-10-20 12:49:21.935189 Event: Receiver handler : Ready
+On: 2011-10-20 12:49:21.935220 Event: Start Call
+On: 2011-10-20 12:49:21.937899 Event: Waiting Feedback
+On: 2011-10-20 12:49:36.938113 Event: Test Succeed
+On: 2011-10-20 12:49:41.019141 Event:
+On: 2011-10-20 12:49:41.019202 Event: init Caller
+On: 2011-10-20 12:49:41.019222 Event: landline
+On: 2011-10-20 12:49:43.022420 Event: Connected to Caller Handler
+On: 2011-10-20 12:49:43.022804 Event: Caller Handler respond
+On: 2011-10-20 12:49:43.025416 Event: Caller handler : Ready
+On: 2011-10-20 12:49:43.025452 Event: init Receiver
+On: 2011-10-20 12:49:43.025474 Event: GSMRZ2
+On: 2011-10-20 12:49:50.035321 Event: Connected to Receiver Handler
+On: 2011-10-20 12:49:50.042746 Event: Receiver Handler respond
+On: 2011-10-20 12:49:50.044867 Event: Receiver handler : Ready
+On: 2011-10-20 12:49:50.044902 Event: Start Call
+On: 2011-10-20 12:49:50.044961 Event: Waiting Feedback
+On: 2011-10-20 12:50:20.045217 Event: Test Failed
+On: 2011-10-20 12:50:24.083189 Event:
+On: 2011-10-20 12:50:24.083248 Event: init Caller
+On: 2011-10-20 12:50:24.083269 Event: GSMRZ2
+On: 2011-10-20 12:50:31.093054 Event: Connected to Caller Handler
+On: 2011-10-20 12:50:31.100277 Event: Caller Handler respond
+On: 2011-10-20 12:50:31.103201 Event: Caller handler : Ready
+On: 2011-10-20 12:50:31.103265 Event: init Receiver
+On: 2011-10-20 12:50:31.103289 Event: sip
+On: 2011-10-20 12:50:33.108733 Event: Connected to Receiver Handler
+On: 2011-10-20 12:50:33.109037 Event: Receiver Handler respond
+On: 2011-10-20 12:50:33.109820 Event: Receiver handler : Ready
+On: 2011-10-20 12:50:33.109862 Event: Start Call
+On: 2011-10-20 12:50:33.110287 Event: Waiting Feedback
+On: 2011-10-20 12:50:36.541303 Event: Test Succeed
+On: 2011-10-20 12:50:40.583842 Event:
+On: 2011-10-20 12:50:40.583900 Event: init Caller
+On: 2011-10-20 12:50:40.583920 Event: sip
+On: 2011-10-20 12:50:42.588830 Event: Connected to Caller Handler
+On: 2011-10-20 12:50:42.589212 Event: Caller Handler respond
+On: 2011-10-20 12:50:42.590178 Event: Caller handler : Ready
+On: 2011-10-20 12:50:42.590212 Event: init Receiver
+On: 2011-10-20 12:50:42.590234 Event: GSMExt.O2
+On: 2011-10-20 12:50:44.594731 Event: Connected to Receiver Handler
+On: 2011-10-20 12:50:44.595020 Event: Receiver Handler respond
+On: 2011-10-20 12:50:44.595208 Event: Receiver handler : Ready
+On: 2011-10-20 12:50:44.595238 Event: Start Call
+On: 2011-10-20 12:50:44.595293 Event: Waiting Feedback
+On: 2011-10-20 12:50:59.595461 Event: Test Succeed
+On: 2011-10-20 12:51:03.672075 Event:
+On: 2011-10-20 12:51:03.672139 Event: init Caller
+On: 2011-10-20 12:51:03.672159 Event: sip
+On: 2011-10-20 12:51:05.678434 Event: Connected to Caller Handler
+On: 2011-10-20 12:51:05.678732 Event: Caller Handler respond
+On: 2011-10-20 12:51:05.679606 Event: Caller handler : Ready
+On: 2011-10-20 12:51:05.679644 Event: init Receiver
+On: 2011-10-20 12:51:05.679666 Event: GSMExt.Tm
+On: 2011-10-20 12:51:07.684904 Event: Connected to Receiver Handler
+On: 2011-10-20 12:51:07.685186 Event: Receiver Handler respond
+On: 2011-10-20 12:51:07.685366 Event: Receiver handler : Ready
+On: 2011-10-20 12:51:07.685396 Event: Start Call
+On: 2011-10-20 12:51:07.685450 Event: Waiting Feedback
+On: 2011-10-20 12:51:22.685607 Event: Test Succeed
+On: 2011-10-20 12:51:26.760388 Event:
+On: 2011-10-20 12:51:26.760452 Event: init Caller
+On: 2011-10-20 12:51:26.760471 Event: sip
+On: 2011-10-20 12:51:28.771161 Event: Connected to Caller Handler
+On: 2011-10-20 12:51:28.771553 Event: Caller Handler respond
+On: 2011-10-20 12:51:28.772326 Event: Caller handler : Ready
+On: 2011-10-20 12:51:28.772363 Event: init Receiver
+On: 2011-10-20 12:51:28.772385 Event: GSMExt.Voda
+On: 2011-10-20 12:51:30.777650 Event: Connected to Receiver Handler
+On: 2011-10-20 12:51:30.777988 Event: Receiver Handler respond
+On: 2011-10-20 12:51:30.778173 Event: Receiver handler : Ready
+On: 2011-10-20 12:51:30.778203 Event: Start Call
+On: 2011-10-20 12:51:30.778256 Event: Waiting Feedback
+On: 2011-10-20 12:51:45.778414 Event: Test Succeed
+
+
+------------------STARTED THE LOGGING 2011-10-20 12:55:31.142452 ------------------
+On: 2011-10-20 12:55:31.142577 Event: init Caller
+On: 2011-10-20 12:55:31.142603 Event: unisip
+On: 2011-10-20 12:55:33.148757 Event: Connected to Caller Handler
+On: 2011-10-20 12:55:33.149068 Event: Caller Handler respond
+On: 2011-10-20 12:55:33.149817 Event: Caller handler : Ready
+On: 2011-10-20 12:55:33.149858 Event: init Receiver
+On: 2011-10-20 12:55:33.149881 Event: GSMRZ1
+On: 2011-10-20 12:55:35.154665 Event: Connected to Receiver Handler
+On: 2011-10-20 12:55:35.154942 Event: Receiver Handler respond
+On: 2011-10-20 12:55:35.155124 Event: Receiver handler : Ready
+On: 2011-10-20 12:55:35.155155 Event: Start Call
+On: 2011-10-20 12:55:35.155206 Event: Waiting Feedback
+On: 2011-10-20 12:55:50.155367 Event: Test Failed
+On: 2011-10-20 12:55:54.232178 Event:
+On: 2011-10-20 12:55:54.232242 Event: init Caller
+On: 2011-10-20 12:55:54.232262 Event: GSMRZ2
+On: 2011-10-20 12:56:01.243503 Event: Connected to Caller Handler
+On: 2011-10-20 12:56:01.251578 Event: Caller Handler respond
+On: 2011-10-20 12:56:01.253813 Event: Caller handler : Ready
+On: 2011-10-20 12:56:01.253851 Event: init Receiver
+On: 2011-10-20 12:56:01.253872 Event: GSMExt.Voda
+On: 2011-10-20 12:56:03.259119 Event: Connected to Receiver Handler
+On: 2011-10-20 12:56:03.259397 Event: Receiver Handler respond
+On: 2011-10-20 12:56:03.259575 Event: Receiver handler : Ready
+On: 2011-10-20 12:56:03.259605 Event: Start Call
+On: 2011-10-20 12:56:03.265817 Event: Waiting Feedback
+On: 2011-10-20 12:56:18.266020 Event: Test Succeed
+On: 2011-10-20 12:56:22.350167 Event:
+On: 2011-10-20 12:56:22.350228 Event: init Caller
+On: 2011-10-20 12:56:22.350247 Event: landline
+On: 2011-10-20 12:56:24.354410 Event: Connected to Caller Handler
+On: 2011-10-20 12:56:24.354793 Event: Caller Handler respond
+On: 2011-10-20 12:56:24.357351 Event: Caller handler : Ready
+On: 2011-10-20 12:56:24.357388 Event: init Receiver
+On: 2011-10-20 12:56:24.357409 Event: GSMRZ3
+On: 2011-10-20 12:56:31.367313 Event: Connected to Receiver Handler
+On: 2011-10-20 12:56:31.374671 Event: Receiver Handler respond
+On: 2011-10-20 12:56:31.377010 Event: Receiver handler : Ready
+On: 2011-10-20 12:56:31.377045 Event: Start Call
+On: 2011-10-20 12:56:31.377104 Event: Waiting Feedback
+On: 2011-10-20 12:57:01.377367 Event: Test Failed
+On: 2011-10-20 12:57:05.417064 Event:
+On: 2011-10-20 12:57:05.417126 Event: init Caller
+On: 2011-10-20 12:57:05.417146 Event: GSMRZ3
+On: 2011-10-20 12:57:12.426295 Event: Connected to Caller Handler
+On: 2011-10-20 12:57:12.433032 Event: Caller Handler respond
+On: 2011-10-20 12:57:12.436392 Event: Caller handler : Ready
+On: 2011-10-20 12:57:12.436438 Event: init Receiver
+On: 2011-10-20 12:57:12.436461 Event: sip
+On: 2011-10-20 12:57:14.441689 Event: Connected to Receiver Handler
+On: 2011-10-20 12:57:14.442032 Event: Receiver Handler respond
+On: 2011-10-20 12:57:14.442790 Event: Receiver handler : Ready
+On: 2011-10-20 12:57:14.442828 Event: Start Call
+On: 2011-10-20 12:57:14.443089 Event: Waiting Feedback
+On: 2011-10-20 12:57:17.897816 Event: Test Succeed
+On: 2011-10-20 12:57:21.939876 Event:
+On: 2011-10-20 12:57:21.939933 Event: init Caller
+On: 2011-10-20 12:57:21.939954 Event: sip
+On: 2011-10-20 12:57:23.943498 Event: Connected to Caller Handler
+On: 2011-10-20 12:57:23.943940 Event: Caller Handler respond
+On: 2011-10-20 12:57:23.944669 Event: Caller handler : Ready
+On: 2011-10-20 12:57:23.944708 Event: init Receiver
+On: 2011-10-20 12:57:23.944730 Event: GSMExt.Eplus
+On: 2011-10-20 12:57:25.950269 Event: Connected to Receiver Handler
+On: 2011-10-20 12:57:25.950553 Event: Receiver Handler respond
+On: 2011-10-20 12:57:25.950734 Event: Receiver handler : Ready
+On: 2011-10-20 12:57:25.950765 Event: Start Call
+On: 2011-10-20 12:57:25.950819 Event: Waiting Feedback
+On: 2011-10-20 12:57:40.950976 Event: Test Succeed
+On: 2011-10-20 12:57:45.030036 Event:
+On: 2011-10-20 12:57:45.030101 Event: init Caller
+On: 2011-10-20 12:57:45.030122 Event: sip
+On: 2011-10-20 12:57:47.035264 Event: Connected to Caller Handler
+On: 2011-10-20 12:57:47.035656 Event: Caller Handler respond
+On: 2011-10-20 12:57:47.036535 Event: Caller handler : Ready
+On: 2011-10-20 12:57:47.036574 Event: init Receiver
+On: 2011-10-20 12:57:47.036596 Event: GSMExt.O2
+On: 2011-10-20 12:57:49.042094 Event: Connected to Receiver Handler
+On: 2011-10-20 12:57:49.042394 Event: Receiver Handler respond
+On: 2011-10-20 12:57:49.042577 Event: Receiver handler : Ready
+On: 2011-10-20 12:57:49.042607 Event: Start Call
+On: 2011-10-20 12:57:49.042662 Event: Waiting Feedback
+On: 2011-10-20 12:58:04.042819 Event: Test Succeed
+On: 2011-10-20 12:58:08.120666 Event:
+On: 2011-10-20 12:58:08.120732 Event: init Caller
+On: 2011-10-20 12:58:08.120752 Event: sip
+On: 2011-10-20 12:58:10.126570 Event: Connected to Caller Handler
+On: 2011-10-20 12:58:10.126857 Event: Caller Handler respond
+On: 2011-10-20 12:58:10.127904 Event: Caller handler : Ready
+On: 2011-10-20 12:58:10.127959 Event: init Receiver
+On: 2011-10-20 12:58:10.127980 Event: GSMExt.Tm
+On: 2011-10-20 12:58:12.133753 Event: Connected to Receiver Handler
+On: 2011-10-20 12:58:12.134060 Event: Receiver Handler respond
+On: 2011-10-20 12:58:12.134241 Event: Receiver handler : Ready
+On: 2011-10-20 12:58:12.134272 Event: Start Call
+On: 2011-10-20 12:58:12.134324 Event: Waiting Feedback
+On: 2011-10-20 12:58:27.134483 Event: Test Succeed
+
+
+------------------STARTED THE LOGGING 2011-10-20 13:04:47.963643 ------------------
+On: 2011-10-20 13:04:47.963724 Event: init Caller
+On: 2011-10-20 13:04:47.963748 Event: unisip
+On: 2011-10-20 13:04:49.968843 Event: Connected to Caller Handler
+On: 2011-10-20 13:04:49.969264 Event: Caller Handler respond
+On: 2011-10-20 13:04:49.970614 Event: Caller handler : Ready
+On: 2011-10-20 13:04:49.970655 Event: init Receiver
+On: 2011-10-20 13:04:49.970677 Event: GSMRZ2
+On: 2011-10-20 13:04:56.979366 Event: Connected to Receiver Handler
+On: 2011-10-20 13:04:56.987448 Event: Receiver Handler respond
+On: 2011-10-20 13:04:56.989741 Event: Receiver handler : Ready
+On: 2011-10-20 13:04:56.989787 Event: Start Call
+On: 2011-10-20 13:04:56.989850 Event: Waiting Feedback
+On: 2011-10-20 13:05:11.990033 Event: Test Failed
+On: 2011-10-20 13:05:16.038473 Event:
+On: 2011-10-20 13:05:16.038537 Event: init Caller
+On: 2011-10-20 13:05:16.038557 Event: GSMRZ1
+On: 2011-10-20 13:05:18.043632 Event: Connected to Caller Handler
+On: 2011-10-20 13:05:18.043911 Event: Caller Handler respond
+On: 2011-10-20 13:05:18.044097 Event: Caller handler : Ready
+On: 2011-10-20 13:05:18.044127 Event: init Receiver
+On: 2011-10-20 13:05:18.044147 Event: GSMExt.Eplus
+On: 2011-10-20 13:05:20.049478 Event: Connected to Receiver Handler
+On: 2011-10-20 13:05:20.049814 Event: Receiver Handler respond
+On: 2011-10-20 13:05:20.050013 Event: Receiver handler : Ready
+On: 2011-10-20 13:05:20.050047 Event: Start Call
+On: 2011-10-20 13:05:20.057741 Event: Waiting Feedback
+On: 2011-10-20 13:05:35.057948 Event: Test Succeed
+On: 2011-10-20 13:05:39.138337 Event:
+On: 2011-10-20 13:05:39.138401 Event: init Caller
+On: 2011-10-20 13:05:39.138422 Event: landline
+On: 2011-10-20 13:05:41.143356 Event: Connected to Caller Handler
+On: 2011-10-20 13:05:41.143742 Event: Caller Handler respond
+On: 2011-10-20 13:05:41.146547 Event: Caller handler : Ready
+On: 2011-10-20 13:05:41.146586 Event: init Receiver
+On: 2011-10-20 13:05:41.146608 Event: GSMRZ3
+On: 2011-10-20 13:05:48.155320 Event: Connected to Receiver Handler
+On: 2011-10-20 13:05:48.163139 Event: Receiver Handler respond
+On: 2011-10-20 13:05:48.165672 Event: Receiver handler : Ready
+On: 2011-10-20 13:05:48.165735 Event: Start Call
+On: 2011-10-20 13:05:48.165802 Event: Waiting Feedback
+On: 2011-10-20 13:06:18.166050 Event: Test Failed
+On: 2011-10-20 13:06:22.207831 Event:
+On: 2011-10-20 13:06:22.207894 Event: init Caller
+On: 2011-10-20 13:06:22.207914 Event: GSMRZ3
+On: 2011-10-20 13:06:29.217827 Event: Connected to Caller Handler
+On: 2011-10-20 13:06:29.226054 Event: Caller Handler respond
+On: 2011-10-20 13:06:29.228295 Event: Caller handler : Ready
+On: 2011-10-20 13:06:29.228329 Event: init Receiver
+On: 2011-10-20 13:06:29.228353 Event: sip
+On: 2011-10-20 13:06:31.232988 Event: Connected to Receiver Handler
+On: 2011-10-20 13:06:31.233384 Event: Receiver Handler respond
+On: 2011-10-20 13:06:31.234224 Event: Receiver handler : Ready
+On: 2011-10-20 13:06:31.234266 Event: Start Call
+On: 2011-10-20 13:06:31.234432 Event: Waiting Feedback
+On: 2011-10-20 13:06:35.248811 Event: Test Succeed
+On: 2011-10-20 13:06:39.291180 Event:
+On: 2011-10-20 13:06:39.291241 Event: init Caller
+On: 2011-10-20 13:06:39.291262 Event: sip
+On: 2011-10-20 13:06:41.296050 Event: Connected to Caller Handler
+On: 2011-10-20 13:06:41.296439 Event: Caller Handler respond
+On: 2011-10-20 13:06:41.297197 Event: Caller handler : Ready
+On: 2011-10-20 13:06:41.297235 Event: init Receiver
+On: 2011-10-20 13:06:41.297257 Event: GSMExt.O2
+On: 2011-10-20 13:06:43.302572 Event: Connected to Receiver Handler
+On: 2011-10-20 13:06:43.302860 Event: Receiver Handler respond
+On: 2011-10-20 13:06:43.303041 Event: Receiver handler : Ready
+On: 2011-10-20 13:06:43.303073 Event: Start Call
+On: 2011-10-20 13:06:43.303131 Event: Waiting Feedback
+On: 2011-10-20 13:06:58.303289 Event: Test Succeed
+On: 2011-10-20 13:07:02.378142 Event:
+On: 2011-10-20 13:07:02.378206 Event: init Caller
+On: 2011-10-20 13:07:02.378226 Event: sip
+On: 2011-10-20 13:07:04.386534 Event: Connected to Caller Handler
+On: 2011-10-20 13:07:04.386831 Event: Caller Handler respond
+On: 2011-10-20 13:07:04.387909 Event: Caller handler : Ready
+On: 2011-10-20 13:07:04.387947 Event: init Receiver
+On: 2011-10-20 13:07:04.387968 Event: GSMExt.Tm
+On: 2011-10-20 13:07:06.393275 Event: Connected to Receiver Handler
+On: 2011-10-20 13:07:06.393568 Event: Receiver Handler respond
+On: 2011-10-20 13:07:06.393800 Event: Receiver handler : Ready
+On: 2011-10-20 13:07:06.393833 Event: Start Call
+On: 2011-10-20 13:07:06.393895 Event: Waiting Feedback
+On: 2011-10-20 13:07:21.394053 Event: Test Succeed
+On: 2011-10-20 13:07:25.470146 Event:
+On: 2011-10-20 13:07:25.470213 Event: init Caller
+On: 2011-10-20 13:07:25.470233 Event: sip
+On: 2011-10-20 13:07:27.478345 Event: Connected to Caller Handler
+On: 2011-10-20 13:07:27.478743 Event: Caller Handler respond
+On: 2011-10-20 13:07:27.479512 Event: Caller handler : Ready
+On: 2011-10-20 13:07:27.479550 Event: init Receiver
+On: 2011-10-20 13:07:27.479572 Event: GSMExt.Voda
+On: 2011-10-20 13:07:29.484912 Event: Connected to Receiver Handler
+On: 2011-10-20 13:07:29.485210 Event: Receiver Handler respond
+On: 2011-10-20 13:07:29.485396 Event: Receiver handler : Ready
+On: 2011-10-20 13:07:29.485430 Event: Start Call
+On: 2011-10-20 13:07:29.485487 Event: Waiting Feedback
+On: 2011-10-20 13:07:44.485646 Event: Test Succeed
+On: 2011-10-20 13:07:48.545018 Event:
+On: 2011-10-20 13:07:48.545079 Event: init Caller
+On: 2011-10-20 13:07:48.545099 Event: sip
+On: 2011-10-20 13:07:50.560936 Event: Connected to Caller Handler
+On: 2011-10-20 13:07:50.561330 Event: Caller Handler respond
+On: 2011-10-20 13:07:50.562315 Event: Caller handler : Ready
+On: 2011-10-20 13:07:50.562355 Event: init Receiver
+On: 2011-10-20 13:07:50.562376 Event: GSMRZ2
+On: 2011-10-20 13:07:57.570255 Event: Connected to Receiver Handler
+On: 2011-10-20 13:07:57.577319 Event: Receiver Handler respond
+On: 2011-10-20 13:07:57.580004 Event: Receiver handler : Ready
+On: 2011-10-20 13:07:57.580062 Event: Start Call
+On: 2011-10-20 13:07:57.580134 Event: Waiting Feedback
+On: 2011-10-20 13:08:12.580321 Event: Test Failed
+On: 2011-10-20 13:08:16.617529 Event:
+On: 2011-10-20 13:08:16.617591 Event: init Caller
+On: 2011-10-20 13:08:16.617611 Event: sip
+On: 2011-10-20 13:08:18.622426 Event: Connected to Caller Handler
+On: 2011-10-20 13:08:18.622815 Event: Caller Handler respond
+On: 2011-10-20 13:08:18.623578 Event: Caller handler : Ready
+On: 2011-10-20 13:08:18.623612 Event: init Receiver
+On: 2011-10-20 13:08:18.623633 Event: GSMRZ3
+On: 2011-10-20 13:08:25.630267 Event: Connected to Receiver Handler
+On: 2011-10-20 13:08:25.638829 Event: Receiver Handler respond
+On: 2011-10-20 13:08:25.641274 Event: Receiver handler : Ready
+On: 2011-10-20 13:08:25.641312 Event: Start Call
+On: 2011-10-20 13:08:25.641373 Event: Waiting Feedback
+On: 2011-10-20 13:08:40.641552 Event: Test Failed
+
+
+------------------STARTED THE LOGGING 2011-10-20 13:15:50.870848 ------------------
+On: 2011-10-20 13:15:50.870923 Event: init Caller
+On: 2011-10-20 13:15:50.870947 Event: unisip
+On: 2011-10-20 13:15:52.876026 Event: Connected to Caller Handler
+On: 2011-10-20 13:15:52.876429 Event: Caller Handler respond
+On: 2011-10-20 13:15:52.877197 Event: Caller handler : Ready
+On: 2011-10-20 13:15:52.877230 Event: init Receiver
+On: 2011-10-20 13:15:52.877252 Event: GSMRZ1
+On: 2011-10-20 13:15:54.881488 Event: Connected to Receiver Handler
+On: 2011-10-20 13:15:54.881825 Event: Receiver Handler respond
+On: 2011-10-20 13:15:54.882048 Event: Receiver handler : Ready
+On: 2011-10-20 13:15:54.882080 Event: Start Call
+On: 2011-10-20 13:15:54.882136 Event: Waiting Feedback
+On: 2011-10-20 13:16:09.882293 Event: Test Failed
+On: 2011-10-20 13:16:13.961333 Event:
+On: 2011-10-20 13:16:13.961401 Event: init Caller
+On: 2011-10-20 13:16:13.961421 Event: GSMRZ2
+On: 2011-10-20 13:16:20.971505 Event: Connected to Caller Handler
+On: 2011-10-20 13:16:20.978850 Event: Caller Handler respond
+On: 2011-10-20 13:16:20.981070 Event: Caller handler : Ready
+On: 2011-10-20 13:16:20.981103 Event: init Receiver
+On: 2011-10-20 13:16:20.981124 Event: GSMExt.Voda
+On: 2011-10-20 13:16:22.986448 Event: Connected to Receiver Handler
+On: 2011-10-20 13:16:22.986727 Event: Receiver Handler respond
+On: 2011-10-20 13:16:22.986907 Event: Receiver handler : Ready
+On: 2011-10-20 13:16:22.986939 Event: Start Call
+On: 2011-10-20 13:16:22.989962 Event: Waiting Feedback
+On: 2011-10-20 13:16:37.990176 Event: Test Succeed
+On: 2011-10-20 13:16:42.070726 Event:
+On: 2011-10-20 13:16:42.070789 Event: init Caller
+On: 2011-10-20 13:16:42.070809 Event: landline
+On: 2011-10-20 13:16:44.077892 Event: Connected to Caller Handler
+On: 2011-10-20 13:16:44.078279 Event: Caller Handler respond
+On: 2011-10-20 13:16:44.081052 Event: Caller handler : Ready
+On: 2011-10-20 13:16:44.081089 Event: init Receiver
+On: 2011-10-20 13:16:44.081111 Event: GSMRZ3
+On: 2011-10-20 13:16:51.084914 Event: Connected to Receiver Handler
+On: 2011-10-20 13:16:51.093161 Event: Receiver Handler respond
+On: 2011-10-20 13:16:51.095548 Event: Receiver handler : Ready
+On: 2011-10-20 13:16:51.095606 Event: Start Call
+On: 2011-10-20 13:16:51.095675 Event: Waiting Feedback
+On: 2011-10-20 13:17:21.095942 Event: Test Failed
+On: 2011-10-20 13:17:25.135193 Event:
+On: 2011-10-20 13:17:25.135254 Event: init Caller
+On: 2011-10-20 13:17:25.135274 Event: GSMRZ3
+On: 2011-10-20 13:17:32.145132 Event: Connected to Caller Handler
+On: 2011-10-20 13:17:32.152995 Event: Caller Handler respond
+On: 2011-10-20 13:17:32.155246 Event: Caller handler : Ready
+On: 2011-10-20 13:17:32.155281 Event: init Receiver
+On: 2011-10-20 13:17:32.155304 Event: sip
+On: 2011-10-20 13:17:34.160357 Event: Connected to Receiver Handler
+On: 2011-10-20 13:17:34.160750 Event: Receiver Handler respond
+On: 2011-10-20 13:17:34.162015 Event: Receiver handler : Ready
+On: 2011-10-20 13:17:34.162062 Event: Start Call
+On: 2011-10-20 13:17:34.162222 Event: Waiting Feedback
+On: 2011-10-20 13:17:37.486333 Event: Test Succeed
+On: 2011-10-20 13:17:41.528098 Event:
+On: 2011-10-20 13:17:41.528154 Event: init Caller
+On: 2011-10-20 13:17:41.528174 Event: sip
+On: 2011-10-20 13:17:43.533036 Event: Connected to Caller Handler
+On: 2011-10-20 13:17:43.533422 Event: Caller Handler respond
+On: 2011-10-20 13:17:43.534406 Event: Caller handler : Ready
+On: 2011-10-20 13:17:43.534440 Event: init Receiver
+On: 2011-10-20 13:17:43.534461 Event: GSMExt.Eplus
+On: 2011-10-20 13:17:45.538889 Event: Connected to Receiver Handler
+On: 2011-10-20 13:17:45.539171 Event: Receiver Handler respond
+On: 2011-10-20 13:17:45.539351 Event: Receiver handler : Ready
+On: 2011-10-20 13:17:45.539381 Event: Start Call
+On: 2011-10-20 13:17:45.539433 Event: Waiting Feedback
+On: 2011-10-20 13:18:00.539588 Event: Test Succeed
+On: 2011-10-20 13:18:04.617080 Event:
+On: 2011-10-20 13:18:04.617145 Event: init Caller
+On: 2011-10-20 13:18:04.617165 Event: sip
+On: 2011-10-20 13:18:06.622695 Event: Connected to Caller Handler
+On: 2011-10-20 13:18:06.623083 Event: Caller Handler respond
+On: 2011-10-20 13:18:06.624164 Event: Caller handler : Ready
+On: 2011-10-20 13:18:06.624203 Event: init Receiver
+On: 2011-10-20 13:18:06.624224 Event: GSMExt.O2
+On: 2011-10-20 13:18:08.628930 Event: Connected to Receiver Handler
+On: 2011-10-20 13:18:08.629224 Event: Receiver Handler respond
+On: 2011-10-20 13:18:08.629513 Event: Receiver handler : Ready
+On: 2011-10-20 13:18:08.629548 Event: Start Call
+On: 2011-10-20 13:18:08.629614 Event: Waiting Feedback
+On: 2011-10-20 13:18:23.629782 Event: Test Succeed
+On: 2011-10-20 13:18:27.708224 Event:
+On: 2011-10-20 13:18:27.708287 Event: init Caller
+On: 2011-10-20 13:18:27.708307 Event: sip
+On: 2011-10-20 13:18:29.714305 Event: Connected to Caller Handler
+On: 2011-10-20 13:18:29.714693 Event: Caller Handler respond
+On: 2011-10-20 13:18:29.715750 Event: Caller handler : Ready
+On: 2011-10-20 13:18:29.715788 Event: init Receiver
+On: 2011-10-20 13:18:29.715810 Event: GSMExt.Tm
+On: 2011-10-20 13:18:31.722139 Event: Connected to Receiver Handler
+On: 2011-10-20 13:18:31.722648 Event: Receiver Handler respond
+On: 2011-10-20 13:18:31.722875 Event: Receiver handler : Ready
+On: 2011-10-20 13:18:31.722913 Event: Start Call
+On: 2011-10-20 13:18:31.725879 Event: Waiting Feedback
+On: 2011-10-20 13:18:46.726073 Event: Test Succeed
+On: 2011-10-20 13:18:50.804161 Event:
+On: 2011-10-20 13:18:50.804225 Event: init Caller
+On: 2011-10-20 13:18:50.804245 Event: sip
+On: 2011-10-20 13:18:52.810431 Event: Connected to Caller Handler
+On: 2011-10-20 13:18:52.810817 Event: Caller Handler respond
+On: 2011-10-20 13:18:52.811576 Event: Caller handler : Ready
+On: 2011-10-20 13:18:52.811613 Event: init Receiver
+On: 2011-10-20 13:18:52.811634 Event: GSMRZ1
+On: 2011-10-20 13:18:54.817163 Event: Connected to Receiver Handler
+On: 2011-10-20 13:18:54.817453 Event: Receiver Handler respond
+On: 2011-10-20 13:18:54.817631 Event: Receiver handler : Ready
+On: 2011-10-20 13:18:54.817661 Event: Start Call
+On: 2011-10-20 13:18:54.821843 Event: Waiting Feedback
+On: 2011-10-20 13:19:09.822054 Event: Test Failed
+On: 2011-10-20 13:19:13.884740 Event:
+On: 2011-10-20 13:19:13.884801 Event: init Caller
+On: 2011-10-20 13:19:13.884821 Event: sip
+On: 2011-10-20 13:19:15.899430 Event: Connected to Caller Handler
+On: 2011-10-20 13:19:15.899818 Event: Caller Handler respond
+On: 2011-10-20 13:19:15.900579 Event: Caller handler : Ready
+On: 2011-10-20 13:19:15.900617 Event: init Receiver
+On: 2011-10-20 13:19:15.900638 Event: GSMRZ3
+On: 2011-10-20 13:19:22.906262 Event: Connected to Receiver Handler
+On: 2011-10-20 13:19:22.914605 Event: Receiver Handler respond
+On: 2011-10-20 13:19:22.916798 Event: Receiver handler : Ready
+On: 2011-10-20 13:19:22.916835 Event: Start Call
+On: 2011-10-20 13:19:22.916893 Event: Waiting Feedback
+On: 2011-10-20 13:19:37.917070 Event: Test Failed
+
+
+------------------STARTED THE LOGGING 2011-10-20 13:33:34.578306 ------------------
+On: 2011-10-20 13:33:34.578385 Event: init Caller
+On: 2011-10-20 13:33:34.578410 Event: unisip
+On: 2011-10-20 13:33:36.588906 Event: Connected to Caller Handler
+On: 2011-10-20 13:33:36.589209 Event: Caller Handler respond
+On: 2011-10-20 13:33:36.590175 Event: Caller handler : Ready
+On: 2011-10-20 13:33:36.590211 Event: init Receiver
+On: 2011-10-20 13:33:36.590232 Event: GSMRZ3
+On: 2011-10-20 13:33:43.595195 Event: Connected to Receiver Handler
+On: 2011-10-20 13:33:43.603509 Event: Receiver Handler respond
+On: 2011-10-20 13:33:43.606274 Event: Receiver handler : Ready
+On: 2011-10-20 13:33:43.606331 Event: Start Call
+On: 2011-10-20 13:33:43.606396 Event: Waiting Feedback
+On: 2011-10-20 13:33:58.606612 Event: Test Failed
+On: 2011-10-20 13:34:02.653142 Event:
+On: 2011-10-20 13:34:02.653203 Event: init Caller
+On: 2011-10-20 13:34:02.653224 Event: GSMRZ1
+On: 2011-10-20 13:34:04.658369 Event: Connected to Caller Handler
+On: 2011-10-20 13:34:04.658648 Event: Caller Handler respond
+On: 2011-10-20 13:34:04.658834 Event: Caller handler : Ready
+On: 2011-10-20 13:34:04.658863 Event: init Receiver
+On: 2011-10-20 13:34:04.658882 Event: GSMExt.Eplus
+On: 2011-10-20 13:34:06.663987 Event: Connected to Receiver Handler
+On: 2011-10-20 13:34:06.664265 Event: Receiver Handler respond
+On: 2011-10-20 13:34:06.664444 Event: Receiver handler : Ready
+On: 2011-10-20 13:34:06.664472 Event: Start Call
+On: 2011-10-20 13:34:06.664524 Event: Waiting Feedback
+On: 2011-10-20 13:34:21.664718 Event: Test Succeed
+On: 2011-10-20 13:34:25.971820 Event:
+On: 2011-10-20 13:34:25.971882 Event: init Caller
+On: 2011-10-20 13:34:25.971902 Event: landline
+On: 2011-10-20 13:34:27.976755 Event: Connected to Caller Handler
+On: 2011-10-20 13:34:27.977137 Event: Caller Handler respond
+On: 2011-10-20 13:34:32.983892 Event: Caller handler : Ready
+On: 2011-10-20 13:34:32.983930 Event: init Receiver
+On: 2011-10-20 13:34:32.983951 Event: GSMRZ2
+On: 2011-10-20 13:34:39.993984 Event: Connected to Receiver Handler
+On: 2011-10-20 13:34:40.002020 Event: Receiver Handler respond
+On: 2011-10-20 13:34:40.004277 Event: Receiver handler : Ready
+On: 2011-10-20 13:34:40.004319 Event: Start Call
+On: 2011-10-20 13:34:40.004383 Event: Waiting Feedback
+On: 2011-10-20 13:35:10.004664 Event: Test Failed
+On: 2011-10-20 13:35:14.042850 Event:
+On: 2011-10-20 13:35:14.042911 Event: init Caller
+On: 2011-10-20 13:35:14.042932 Event: GSMRZ2
+On: 2011-10-20 13:35:21.050297 Event: Connected to Caller Handler
+On: 2011-10-20 13:35:21.058344 Event: Caller Handler respond
+On: 2011-10-20 13:35:21.060549 Event: Caller handler : Ready
+On: 2011-10-20 13:35:21.060584 Event: init Receiver
+On: 2011-10-20 13:35:21.060608 Event: sip
+On: 2011-10-20 13:35:23.065615 Event: Connected to Receiver Handler
+On: 2011-10-20 13:35:23.065962 Event: Receiver Handler respond
+On: 2011-10-20 13:35:23.066715 Event: Receiver handler : Ready
+On: 2011-10-20 13:35:23.066755 Event: Start Call
+On: 2011-10-20 13:35:23.067016 Event: Waiting Feedback
+On: 2011-10-20 13:35:26.502442 Event: Test Succeed
+On: 2011-10-20 13:35:30.544077 Event:
+On: 2011-10-20 13:35:30.544136 Event: init Caller
+On: 2011-10-20 13:35:30.544157 Event: sip
+On: 2011-10-20 13:35:32.549192 Event: Connected to Caller Handler
+On: 2011-10-20 13:35:32.549487 Event: Caller Handler respond
+On: 2011-10-20 13:35:32.550317 Event: Caller handler : Ready
+On: 2011-10-20 13:35:32.550356 Event: init Receiver
+On: 2011-10-20 13:35:32.550377 Event: GSMExt.O2
+On: 2011-10-20 13:35:34.554635 Event: Connected to Receiver Handler
+On: 2011-10-20 13:35:34.554922 Event: Receiver Handler respond
+On: 2011-10-20 13:35:34.555104 Event: Receiver handler : Ready
+On: 2011-10-20 13:35:34.555135 Event: Start Call
+On: 2011-10-20 13:35:34.555189 Event: Waiting Feedback
+On: 2011-10-20 13:35:49.555370 Event: Test Succeed
+On: 2011-10-20 13:35:53.631781 Event:
+On: 2011-10-20 13:35:53.631846 Event: init Caller
+On: 2011-10-20 13:35:53.631866 Event: sip
+On: 2011-10-20 13:35:55.638084 Event: Connected to Caller Handler
+On: 2011-10-20 13:35:55.638473 Event: Caller Handler respond
+On: 2011-10-20 13:35:55.639549 Event: Caller handler : Ready
+On: 2011-10-20 13:35:55.639583 Event: init Receiver
+On: 2011-10-20 13:35:55.639604 Event: GSMExt.Tm
+On: 2011-10-20 13:35:57.643115 Event: Connected to Receiver Handler
+On: 2011-10-20 13:35:57.643396 Event: Receiver Handler respond
+On: 2011-10-20 13:35:57.643597 Event: Receiver handler : Ready
+On: 2011-10-20 13:35:57.643624 Event: Start Call
+On: 2011-10-20 13:35:57.643680 Event: Waiting Feedback
+On: 2011-10-20 13:36:12.643864 Event: Test Succeed
+On: 2011-10-20 13:36:16.719382 Event:
+On: 2011-10-20 13:36:16.719445 Event: init Caller
+On: 2011-10-20 13:36:16.719465 Event: sip
+On: 2011-10-20 13:36:18.726536 Event: Connected to Caller Handler
+On: 2011-10-20 13:36:18.726822 Event: Caller Handler respond
+On: 2011-10-20 13:36:18.727561 Event: Caller handler : Ready
+On: 2011-10-20 13:36:18.727596 Event: init Receiver
+On: 2011-10-20 13:36:18.727617 Event: GSMExt.Voda
+On: 2011-10-20 13:36:20.732944 Event: Connected to Receiver Handler
+On: 2011-10-20 13:36:20.733225 Event: Receiver Handler respond
+On: 2011-10-20 13:36:20.733406 Event: Receiver handler : Ready
+On: 2011-10-20 13:36:20.733438 Event: Start Call
+On: 2011-10-20 13:36:20.733492 Event: Waiting Feedback
+On: 2011-10-20 13:36:35.733677 Event: Test Succeed
+On: 2011-10-20 13:36:39.793679 Event:
+On: 2011-10-20 13:36:39.793772 Event: init Caller
+On: 2011-10-20 13:36:39.793793 Event: sip
+On: 2011-10-20 13:36:41.809209 Event: Connected to Caller Handler
+On: 2011-10-20 13:36:41.809505 Event: Caller Handler respond
+On: 2011-10-20 13:36:41.810813 Event: Caller handler : Ready
+On: 2011-10-20 13:36:41.810850 Event: init Receiver
+On: 2011-10-20 13:36:41.810872 Event: GSMRZ3
+On: 2011-10-20 13:36:48.818674 Event: Connected to Receiver Handler
+On: 2011-10-20 13:36:48.826212 Event: Receiver Handler respond
+On: 2011-10-20 13:36:48.829315 Event: Receiver handler : Ready
+On: 2011-10-20 13:36:48.829371 Event: Start Call
+On: 2011-10-20 13:36:48.829438 Event: Waiting Feedback
+On: 2011-10-20 13:37:03.829682 Event: Test Failed
+On: 2011-10-20 13:37:07.883786 Event:
+On: 2011-10-20 13:37:07.883848 Event: init Caller
+On: 2011-10-20 13:37:07.883868 Event: sip
+On: 2011-10-20 13:37:09.888709 Event: Connected to Caller Handler
+On: 2011-10-20 13:37:09.889099 Event: Caller Handler respond
+On: 2011-10-20 13:37:09.890387 Event: Caller handler : Ready
+On: 2011-10-20 13:37:09.890424 Event: init Receiver
+On: 2011-10-20 13:37:09.890446 Event: GSMRZ2
+On: 2011-10-20 13:37:16.896565 Event: Connected to Receiver Handler
+On: 2011-10-20 13:37:16.904660 Event: Receiver Handler respond
+On: 2011-10-20 13:37:16.906936 Event: Receiver handler : Ready
+On: 2011-10-20 13:37:16.906990 Event: Start Call
+On: 2011-10-20 13:37:16.907059 Event: Waiting Feedback
+On: 2011-10-20 13:37:31.907267 Event: Test Failed
+
+
+------------------STARTED THE LOGGING 2011-10-20 13:51:31.086361 ------------------
+On: 2011-10-20 13:51:31.086445 Event: init Caller
+On: 2011-10-20 13:51:31.086470 Event: unisip
+On: 2011-10-20 13:51:33.091647 Event: Connected to Caller Handler
+On: 2011-10-20 13:51:33.091960 Event: Caller Handler respond
+On: 2011-10-20 13:51:33.092728 Event: Caller handler : Ready
+On: 2011-10-20 13:51:33.092768 Event: init Receiver
+On: 2011-10-20 13:51:33.092791 Event: GSMRZ2
+On: 2011-10-20 13:51:40.098304 Event: Connected to Receiver Handler
+On: 2011-10-20 13:51:40.105197 Event: Receiver Handler respond
+On: 2011-10-20 13:51:40.108058 Event: Receiver handler : Ready
+On: 2011-10-20 13:51:40.108108 Event: Start Call
+On: 2011-10-20 13:51:40.108172 Event: Waiting Feedback
+On: 2011-10-20 13:51:55.108381 Event: Test Failed
+On: 2011-10-20 13:51:59.154154 Event:
+On: 2011-10-20 13:51:59.154215 Event: init Caller
+On: 2011-10-20 13:51:59.154236 Event: GSMRZ1
+On: 2011-10-20 13:52:01.159313 Event: Connected to Caller Handler
+On: 2011-10-20 13:52:01.159590 Event: Caller Handler respond
+On: 2011-10-20 13:52:01.159780 Event: Caller handler : Ready
+On: 2011-10-20 13:52:01.159811 Event: init Receiver
+On: 2011-10-20 13:52:01.159831 Event: GSMExt.Voda
+On: 2011-10-20 13:52:03.165171 Event: Connected to Receiver Handler
+On: 2011-10-20 13:52:03.165451 Event: Receiver Handler respond
+On: 2011-10-20 13:52:03.165631 Event: Receiver handler : Ready
+On: 2011-10-20 13:52:03.165662 Event: Start Call
+On: 2011-10-20 13:52:03.173835 Event: Waiting Feedback
+On: 2011-10-20 13:52:18.174074 Event: Test Failed
+On: 2011-10-20 13:52:22.255772 Event:
+On: 2011-10-20 13:52:22.255834 Event: init Caller
+On: 2011-10-20 13:52:22.255855 Event: landline
+On: 2011-10-20 13:52:24.260802 Event: Connected to Caller Handler
+On: 2011-10-20 13:52:24.261207 Event: Caller Handler respond
+On: 2011-10-20 13:52:24.263885 Event: Caller handler : Ready
+On: 2011-10-20 13:52:24.263924 Event: init Receiver
+On: 2011-10-20 13:52:24.263946 Event: GSMRZ3
+On: 2011-10-20 13:52:31.270265 Event: Connected to Receiver Handler
+On: 2011-10-20 13:52:31.277224 Event: Receiver Handler respond
+On: 2011-10-20 13:52:31.279290 Event: Receiver handler : Ready
+On: 2011-10-20 13:52:31.279327 Event: Start Call
+On: 2011-10-20 13:52:31.279386 Event: Waiting Feedback
+On: 2011-10-20 13:53:01.279665 Event: Test Failed
+On: 2011-10-20 13:53:05.319791 Event:
+On: 2011-10-20 13:53:05.319851 Event: init Caller
+On: 2011-10-20 13:53:05.319872 Event: GSMRZ3
+On: 2011-10-20 13:53:12.326300 Event: Connected to Caller Handler
+On: 2011-10-20 13:53:12.333616 Event: Caller Handler respond
+On: 2011-10-20 13:53:12.335930 Event: Caller handler : Ready
+On: 2011-10-20 13:53:12.335968 Event: init Receiver
+On: 2011-10-20 13:53:12.335992 Event: sip
+On: 2011-10-20 13:53:14.341048 Event: Connected to Receiver Handler
+On: 2011-10-20 13:53:14.341446 Event: Receiver Handler respond
+On: 2011-10-20 13:53:14.342392 Event: Receiver handler : Ready
+On: 2011-10-20 13:53:14.342433 Event: Start Call
+On: 2011-10-20 13:53:14.342599 Event: Waiting Feedback
+On: 2011-10-20 13:53:17.667413 Event: Test Succeed
+On: 2011-10-20 13:53:21.709870 Event:
+On: 2011-10-20 13:53:21.709931 Event: init Caller
+On: 2011-10-20 13:53:21.709952 Event: sip
+On: 2011-10-20 13:53:23.714821 Event: Connected to Caller Handler
+On: 2011-10-20 13:53:23.715214 Event: Caller Handler respond
+On: 2011-10-20 13:53:23.715979 Event: Caller handler : Ready
+On: 2011-10-20 13:53:23.716012 Event: init Receiver
+On: 2011-10-20 13:53:23.716034 Event: GSMExt.Eplus
+On: 2011-10-20 13:53:25.721441 Event: Connected to Receiver Handler
+On: 2011-10-20 13:53:25.721764 Event: Receiver Handler respond
+On: 2011-10-20 13:53:25.722113 Event: Receiver handler : Ready
+On: 2011-10-20 13:53:25.722153 Event: Start Call
+On: 2011-10-20 13:53:25.722226 Event: Waiting Feedback
+On: 2011-10-20 13:53:40.722417 Event: Test Failed
+On: 2011-10-20 13:53:44.800690 Event:
+On: 2011-10-20 13:53:44.800753 Event: init Caller
+On: 2011-10-20 13:53:44.800775 Event: sip
+On: 2011-10-20 13:53:46.806938 Event: Connected to Caller Handler
+On: 2011-10-20 13:53:46.807326 Event: Caller Handler respond
+On: 2011-10-20 13:53:46.808519 Event: Caller handler : Ready
+On: 2011-10-20 13:53:46.808557 Event: init Receiver
+On: 2011-10-20 13:53:46.808579 Event: GSMExt.O2
+On: 2011-10-20 13:53:48.814237 Event: Connected to Receiver Handler
+On: 2011-10-20 13:53:48.814519 Event: Receiver Handler respond
+On: 2011-10-20 13:53:48.814702 Event: Receiver handler : Ready
+On: 2011-10-20 13:53:48.814733 Event: Start Call
+On: 2011-10-20 13:53:48.814788 Event: Waiting Feedback
+On: 2011-10-20 13:54:03.814982 Event: Test Failed
+On: 2011-10-20 13:54:07.897593 Event:
+On: 2011-10-20 13:54:07.897657 Event: init Caller
+On: 2011-10-20 13:54:07.897679 Event: sip
+On: 2011-10-20 13:54:09.902383 Event: Connected to Caller Handler
+On: 2011-10-20 13:54:09.902777 Event: Caller Handler respond
+On: 2011-10-20 13:54:09.903546 Event: Caller handler : Ready
+On: 2011-10-20 13:54:09.903585 Event: init Receiver
+On: 2011-10-20 13:54:09.903607 Event: GSMExt.Tm
+On: 2011-10-20 13:54:11.908944 Event: Connected to Receiver Handler
+On: 2011-10-20 13:54:11.909221 Event: Receiver Handler respond
+On: 2011-10-20 13:54:11.909400 Event: Receiver handler : Ready
+On: 2011-10-20 13:54:11.909430 Event: Start Call
+On: 2011-10-20 13:54:11.909485 Event: Waiting Feedback
+On: 2011-10-20 13:54:26.909671 Event: Test Failed
+On: 2011-10-20 13:54:30.969229 Event:
+On: 2011-10-20 13:54:30.969289 Event: init Caller
+On: 2011-10-20 13:54:30.969309 Event: sip
+On: 2011-10-20 13:54:32.974424 Event: Connected to Caller Handler
+On: 2011-10-20 13:54:32.974718 Event: Caller Handler respond
+On: 2011-10-20 13:54:32.975487 Event: Caller handler : Ready
+On: 2011-10-20 13:54:32.975526 Event: init Receiver
+On: 2011-10-20 13:54:32.975548 Event: GSMRZ2
+On: 2011-10-20 13:54:39.980909 Event: Connected to Receiver Handler
+On: 2011-10-20 13:54:39.988181 Event: Receiver Handler respond
+On: 2011-10-20 13:54:39.990838 Event: Receiver handler : Ready
+On: 2011-10-20 13:54:39.990899 Event: Start Call
+On: 2011-10-20 13:54:39.990971 Event: Waiting Feedback
+On: 2011-10-20 13:54:54.991195 Event: Test Failed
+On: 2011-10-20 13:54:59.031468 Event:
+On: 2011-10-20 13:54:59.031527 Event: init Caller
+On: 2011-10-20 13:54:59.031548 Event: sip
+On: 2011-10-20 13:55:01.036635 Event: Connected to Caller Handler
+On: 2011-10-20 13:55:01.036938 Event: Caller Handler respond
+On: 2011-10-20 13:55:01.037860 Event: Caller handler : Ready
+On: 2011-10-20 13:55:01.037909 Event: init Receiver
+On: 2011-10-20 13:55:01.037933 Event: GSMExt.Voda
+On: 2011-10-20 13:55:03.042129 Event: Connected to Receiver Handler
+On: 2011-10-20 13:55:03.042410 Event: Receiver Handler respond
+On: 2011-10-20 13:55:03.042591 Event: Receiver handler : Ready
+On: 2011-10-20 13:55:03.042622 Event: Start Call
+On: 2011-10-20 13:55:03.042688 Event: Waiting Feedback
+On: 2011-10-20 13:55:18.042874 Event: Test Failed
+On: 2011-10-20 13:55:22.120742 Event:
+On: 2011-10-20 13:55:22.120807 Event: init Caller
+On: 2011-10-20 13:55:22.120828 Event: sip
+On: 2011-10-20 13:55:24.126445 Event: Connected to Caller Handler
+On: 2011-10-20 13:55:24.126840 Event: Caller Handler respond
+On: 2011-10-20 13:55:24.127927 Event: Caller handler : Ready
+On: 2011-10-20 13:55:24.127965 Event: init Receiver
+On: 2011-10-20 13:55:24.127988 Event: GSMRZ1
+On: 2011-10-20 13:55:26.133508 Event: Connected to Receiver Handler
+On: 2011-10-20 13:55:26.133855 Event: Receiver Handler respond
+On: 2011-10-20 13:55:26.134056 Event: Receiver handler : Ready
+On: 2011-10-20 13:55:26.134088 Event: Start Call
+On: 2011-10-20 13:55:26.134145 Event: Waiting Feedback
+On: 2011-10-20 13:55:41.134373 Event: Test Failed
+On: 2011-10-20 13:55:45.205792 Event:
+On: 2011-10-20 13:55:45.205854 Event: init Caller
+On: 2011-10-20 13:55:45.205875 Event: sip
+On: 2011-10-20 13:55:47.213994 Event: Connected to Caller Handler
+On: 2011-10-20 13:55:47.214388 Event: Caller Handler respond
+On: 2011-10-20 13:55:47.215171 Event: Caller handler : Ready
+On: 2011-10-20 13:55:47.215209 Event: init Receiver
+On: 2011-10-20 13:55:47.215231 Event: GSMRZ3
+On: 2011-10-20 13:55:54.222316 Event: Connected to Receiver Handler
+On: 2011-10-20 13:55:54.231041 Event: Receiver Handler respond
+On: 2011-10-20 13:55:54.233670 Event: Receiver handler : Ready
+On: 2011-10-20 13:55:54.233769 Event: Start Call
+On: 2011-10-20 13:55:54.233844 Event: Waiting Feedback
+On: 2011-10-20 13:56:09.234051 Event: Test Failed
+On: 2011-10-20 13:56:13.275595 Event:
+On: 2011-10-20 13:56:13.275653 Event: init Caller
+On: 2011-10-20 13:56:13.275674 Event: sip
+On: 2011-10-20 13:56:15.280836 Event: Connected to Caller Handler
+On: 2011-10-20 13:56:15.281133 Event: Caller Handler respond
+On: 2011-10-20 13:56:15.282072 Event: Caller handler : Ready
+On: 2011-10-20 13:56:15.282114 Event: init Receiver
+On: 2011-10-20 13:56:15.282136 Event: GSMExt.Eplus
+On: 2011-10-20 13:56:17.291323 Event: Connected to Receiver Handler
+On: 2011-10-20 13:56:17.291600 Event: Receiver Handler respond
+On: 2011-10-20 13:56:17.291784 Event: Receiver handler : Ready
+On: 2011-10-20 13:56:17.291815 Event: Start Call
+On: 2011-10-20 13:56:17.291871 Event: Waiting Feedback
+On: 2011-10-20 13:56:32.292056 Event: Test Failed
+On: 2011-10-20 13:56:36.368937 Event:
+On: 2011-10-20 13:56:36.369002 Event: init Caller
+On: 2011-10-20 13:56:36.369024 Event: sip
+On: 2011-10-20 13:56:38.375362 Event: Connected to Caller Handler
+On: 2011-10-20 13:56:38.375755 Event: Caller Handler respond
+On: 2011-10-20 13:56:38.376521 Event: Caller handler : Ready
+On: 2011-10-20 13:56:38.376559 Event: init Receiver
+On: 2011-10-20 13:56:38.376581 Event: GSMExt.O2
+On: 2011-10-20 13:56:40.381948 Event: Connected to Receiver Handler
+On: 2011-10-20 13:56:40.382233 Event: Receiver Handler respond
+On: 2011-10-20 13:56:40.382420 Event: Receiver handler : Ready
+On: 2011-10-20 13:56:40.382452 Event: Start Call
+On: 2011-10-20 13:56:40.382508 Event: Waiting Feedback
+On: 2011-10-20 13:56:55.382691 Event: Test Failed
+On: 2011-10-20 13:56:59.462069 Event:
+On: 2011-10-20 13:56:59.462137 Event: init Caller
+On: 2011-10-20 13:56:59.462158 Event: sip
+On: 2011-10-20 13:57:01.472643 Event: Connected to Caller Handler
+On: 2011-10-20 13:57:01.472936 Event: Caller Handler respond
+On: 2011-10-20 13:57:01.473692 Event: Caller handler : Ready
+On: 2011-10-20 13:57:01.473896 Event: init Receiver
+On: 2011-10-20 13:57:01.473923 Event: GSMExt.Tm
+On: 2011-10-20 13:57:03.478682 Event: Connected to Receiver Handler
+On: 2011-10-20 13:57:03.478966 Event: Receiver Handler respond
+On: 2011-10-20 13:57:03.479149 Event: Receiver handler : Ready
+On: 2011-10-20 13:57:03.479180 Event: Start Call
+On: 2011-10-20 13:57:03.479236 Event: Waiting Feedback
+On: 2011-10-20 13:57:18.479419 Event: Test Failed
+On: 2011-10-20 13:57:22.537989 Event:
+On: 2011-10-20 13:57:22.538054 Event: init Caller
+On: 2011-10-20 13:57:22.538075 Event: GSMRZ3
+On: 2011-10-20 13:57:29.558397 Event: Connected to Caller Handler
+On: 2011-10-20 13:57:29.565614 Event: Caller Handler respond
+On: 2011-10-20 13:57:29.568944 Event: Caller handler : Ready
+On: 2011-10-20 13:57:29.568988 Event: init Receiver
+On: 2011-10-20 13:57:29.569011 Event: GSMRZ3
+On: 2011-10-20 13:57:36.579247 Event: Connected to Receiver Handler
+On: 2011-10-20 13:57:59.576830 Event: 998 General Handler Error: Could not connect Destination handler
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:01:40.029329 ------------------
+On: 2011-10-20 14:01:40.029406 Event: init Caller
+On: 2011-10-20 14:01:40.029431 Event: unisip
+On: 2011-10-20 14:01:42.034704 Event: Connected to Caller Handler
+On: 2011-10-20 14:01:42.035012 Event: Caller Handler respond
+On: 2011-10-20 14:01:42.035771 Event: Caller handler : Ready
+On: 2011-10-20 14:01:42.035812 Event: init Receiver
+On: 2011-10-20 14:01:42.035834 Event: GSMRZ1
+On: 2011-10-20 14:01:44.041224 Event: Connected to Receiver Handler
+On: 2011-10-20 14:01:44.041504 Event: Receiver Handler respond
+On: 2011-10-20 14:01:44.041685 Event: Receiver handler : Ready
+On: 2011-10-20 14:01:44.041756 Event: Start Call
+On: 2011-10-20 14:01:44.041811 Event: Waiting Feedback
+On: 2011-10-20 14:01:59.041970 Event: Test Failed
+On: 2011-10-20 14:02:03.120295 Event:
+On: 2011-10-20 14:02:03.120360 Event: init Caller
+On: 2011-10-20 14:02:03.120380 Event: GSMRZ2
+On: 2011-10-20 14:02:10.131345 Event: Connected to Caller Handler
+On: 2011-10-20 14:02:10.138348 Event: Caller Handler respond
+On: 2011-10-20 14:02:10.140500 Event: Caller handler : Ready
+On: 2011-10-20 14:02:10.140534 Event: init Receiver
+On: 2011-10-20 14:02:10.140555 Event: GSMExt.Tm
+On: 2011-10-20 14:02:12.146004 Event: Connected to Receiver Handler
+On: 2011-10-20 14:02:12.146288 Event: Receiver Handler respond
+On: 2011-10-20 14:02:12.146470 Event: Receiver handler : Ready
+On: 2011-10-20 14:02:12.146499 Event: Start Call
+On: 2011-10-20 14:02:12.149963 Event: Waiting Feedback
+On: 2011-10-20 14:02:27.150177 Event: Test Failed
+On: 2011-10-20 14:02:31.230600 Event:
+On: 2011-10-20 14:02:31.230663 Event: init Caller
+On: 2011-10-20 14:02:31.230683 Event: landline
+On: 2011-10-20 14:02:33.240404 Event: Connected to Caller Handler
+On: 2011-10-20 14:02:33.240794 Event: Caller Handler respond
+On: 2011-10-20 14:02:33.243938 Event: Caller handler : Ready
+On: 2011-10-20 14:02:33.243978 Event: init Receiver
+On: 2011-10-20 14:02:33.244000 Event: GSMRZ3
+On: 2011-10-20 14:02:40.250268 Event: Connected to Receiver Handler
+On: 2011-10-20 14:02:40.257091 Event: Receiver Handler respond
+On: 2011-10-20 14:02:40.260463 Event: Receiver handler : Ready
+On: 2011-10-20 14:02:40.260513 Event: Start Call
+On: 2011-10-20 14:02:40.260578 Event: Waiting Feedback
+On: 2011-10-20 14:03:10.260824 Event: Test Failed
+On: 2011-10-20 14:03:14.297639 Event:
+On: 2011-10-20 14:03:14.297698 Event: init Caller
+On: 2011-10-20 14:03:14.297748 Event: GSMRZ3
+On: 2011-10-20 14:03:21.307625 Event: Connected to Caller Handler
+On: 2011-10-20 14:03:21.314791 Event: Caller Handler respond
+On: 2011-10-20 14:03:21.318101 Event: Caller handler : Ready
+On: 2011-10-20 14:03:21.318161 Event: init Receiver
+On: 2011-10-20 14:03:21.318185 Event: sip
+On: 2011-10-20 14:03:23.322436 Event: Connected to Receiver Handler
+On: 2011-10-20 14:03:23.322828 Event: Receiver Handler respond
+On: 2011-10-20 14:03:23.323588 Event: Receiver handler : Ready
+On: 2011-10-20 14:03:23.323626 Event: Start Call
+On: 2011-10-20 14:03:23.323785 Event: Waiting Feedback
+On: 2011-10-20 14:03:26.629611 Event: Test Succeed
+On: 2011-10-20 14:03:30.671053 Event:
+On: 2011-10-20 14:03:30.671111 Event: init Caller
+On: 2011-10-20 14:03:30.671131 Event: sip
+On: 2011-10-20 14:03:32.676039 Event: Connected to Caller Handler
+On: 2011-10-20 14:03:32.676429 Event: Caller Handler respond
+On: 2011-10-20 14:03:32.677504 Event: Caller handler : Ready
+On: 2011-10-20 14:03:32.677544 Event: init Receiver
+On: 2011-10-20 14:03:32.677566 Event: GSMExt.Eplus
+On: 2011-10-20 14:03:34.682625 Event: Connected to Receiver Handler
+On: 2011-10-20 14:03:34.682907 Event: Receiver Handler respond
+On: 2011-10-20 14:03:34.683091 Event: Receiver handler : Ready
+On: 2011-10-20 14:03:34.683120 Event: Start Call
+On: 2011-10-20 14:03:34.683174 Event: Waiting Feedback
+On: 2011-10-20 14:03:49.683333 Event: Test Failed
+On: 2011-10-20 14:03:53.756428 Event:
+On: 2011-10-20 14:03:53.756489 Event: init Caller
+On: 2011-10-20 14:03:53.756510 Event: sip
+On: 2011-10-20 14:03:55.766372 Event: Connected to Caller Handler
+On: 2011-10-20 14:03:55.766760 Event: Caller Handler respond
+On: 2011-10-20 14:03:55.768105 Event: Caller handler : Ready
+On: 2011-10-20 14:03:55.768144 Event: init Receiver
+On: 2011-10-20 14:03:55.768166 Event: GSMExt.O2
+On: 2011-10-20 14:03:57.773688 Event: Connected to Receiver Handler
+On: 2011-10-20 14:03:57.774163 Event: Receiver Handler respond
+On: 2011-10-20 14:03:57.774393 Event: Receiver handler : Ready
+On: 2011-10-20 14:03:57.774424 Event: Start Call
+On: 2011-10-20 14:03:57.774479 Event: Waiting Feedback
+On: 2011-10-20 14:04:12.774634 Event: Test Failed
+On: 2011-10-20 14:04:16.852659 Event:
+On: 2011-10-20 14:04:16.852720 Event: init Caller
+On: 2011-10-20 14:04:16.852740 Event: sip
+On: 2011-10-20 14:04:18.859141 Event: Connected to Caller Handler
+On: 2011-10-20 14:04:18.859529 Event: Caller Handler respond
+On: 2011-10-20 14:04:18.860298 Event: Caller handler : Ready
+On: 2011-10-20 14:04:18.860338 Event: init Receiver
+On: 2011-10-20 14:04:18.860359 Event: GSMExt.Voda
+On: 2011-10-20 14:04:20.865829 Event: Connected to Receiver Handler
+On: 2011-10-20 14:04:20.866278 Event: Receiver Handler respond
+On: 2011-10-20 14:04:20.866507 Event: Receiver handler : Ready
+On: 2011-10-20 14:04:20.866539 Event: Start Call
+On: 2011-10-20 14:04:20.866594 Event: Waiting Feedback
+On: 2011-10-20 14:04:35.866751 Event: Test Failed
+On: 2011-10-20 14:04:39.943996 Event:
+On: 2011-10-20 14:04:39.944062 Event: init Caller
+On: 2011-10-20 14:04:39.944083 Event: sip
+On: 2011-10-20 14:04:41.950606 Event: Connected to Caller Handler
+On: 2011-10-20 14:04:41.950995 Event: Caller Handler respond
+On: 2011-10-20 14:04:41.951762 Event: Caller handler : Ready
+On: 2011-10-20 14:04:41.951803 Event: init Receiver
+On: 2011-10-20 14:04:41.951825 Event: GSMRZ1
+On: 2011-10-20 14:04:43.957240 Event: Connected to Receiver Handler
+On: 2011-10-20 14:04:43.957528 Event: Receiver Handler respond
+On: 2011-10-20 14:04:43.957743 Event: Receiver handler : Ready
+On: 2011-10-20 14:04:43.957772 Event: Start Call
+On: 2011-10-20 14:04:43.957828 Event: Waiting Feedback
+On: 2011-10-20 14:04:58.957984 Event: Test Failed
+On: 2011-10-20 14:05:03.036877 Event:
+On: 2011-10-20 14:05:03.036941 Event: init Caller
+On: 2011-10-20 14:05:03.036961 Event: sip
+On: 2011-10-20 14:05:05.041302 Event: Connected to Caller Handler
+On: 2011-10-20 14:05:05.041690 Event: Caller Handler respond
+On: 2011-10-20 14:05:05.042972 Event: Caller handler : Ready
+On: 2011-10-20 14:05:05.043011 Event: init Receiver
+On: 2011-10-20 14:05:05.043033 Event: GSMExt.Tm
+On: 2011-10-20 14:05:07.046623 Event: Connected to Receiver Handler
+On: 2011-10-20 14:05:07.046910 Event: Receiver Handler respond
+On: 2011-10-20 14:05:07.047092 Event: Receiver handler : Ready
+On: 2011-10-20 14:05:07.047122 Event: Start Call
+On: 2011-10-20 14:05:07.047175 Event: Waiting Feedback
+On: 2011-10-20 14:05:22.047331 Event: Test Failed
+On: 2011-10-20 14:05:26.105013 Event:
+On: 2011-10-20 14:05:26.105072 Event: init Caller
+On: 2011-10-20 14:05:26.105093 Event: sip
+On: 2011-10-20 14:05:28.119758 Event: Connected to Caller Handler
+On: 2011-10-20 14:05:28.120142 Event: Caller Handler respond
+On: 2011-10-20 14:05:28.120898 Event: Caller handler : Ready
+On: 2011-10-20 14:05:28.120933 Event: init Receiver
+On: 2011-10-20 14:05:28.120954 Event: GSMRZ2
+On: 2011-10-20 14:05:35.130256 Event: Connected to Receiver Handler
+On: 2011-10-20 14:05:35.138323 Event: Receiver Handler respond
+On: 2011-10-20 14:05:35.140469 Event: Receiver handler : Ready
+On: 2011-10-20 14:05:35.140503 Event: Start Call
+On: 2011-10-20 14:05:35.140563 Event: Waiting Feedback
+On: 2011-10-20 14:05:50.140741 Event: Test Failed
+On: 2011-10-20 14:05:54.178612 Event:
+On: 2011-10-20 14:05:54.178671 Event: init Caller
+On: 2011-10-20 14:05:54.178691 Event: sip
+On: 2011-10-20 14:05:56.183526 Event: Connected to Caller Handler
+On: 2011-10-20 14:05:56.183908 Event: Caller Handler respond
+On: 2011-10-20 14:05:56.184671 Event: Caller handler : Ready
+On: 2011-10-20 14:05:56.184709 Event: init Receiver
+On: 2011-10-20 14:05:56.184731 Event: GSMRZ3
+On: 2011-10-20 14:06:03.194842 Event: Connected to Receiver Handler
+On: 2011-10-20 14:06:03.202390 Event: Receiver Handler respond
+On: 2011-10-20 14:06:03.204604 Event: Receiver handler : Ready
+On: 2011-10-20 14:06:03.204639 Event: Start Call
+On: 2011-10-20 14:06:03.204699 Event: Waiting Feedback
+On: 2011-10-20 14:06:18.204879 Event: Test Failed
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:09:00.996941 ------------------
+On: 2011-10-20 14:09:00.997017 Event: init Caller
+On: 2011-10-20 14:09:00.997041 Event: unisip
+On: 2011-10-20 14:09:03.002393 Event: Connected to Caller Handler
+On: 2011-10-20 14:09:03.002707 Event: Caller Handler respond
+On: 2011-10-20 14:09:03.003480 Event: Caller handler : Ready
+On: 2011-10-20 14:09:03.003519 Event: init Receiver
+On: 2011-10-20 14:09:03.003541 Event: GSMRZ1
+On: 2011-10-20 14:09:05.008937 Event: Connected to Receiver Handler
+On: 2011-10-20 14:09:05.009223 Event: Receiver Handler respond
+On: 2011-10-20 14:09:05.009409 Event: Receiver handler : Ready
+On: 2011-10-20 14:09:05.009441 Event: Start Call
+On: 2011-10-20 14:09:05.009496 Event: Waiting Feedback
+On: 2011-10-20 14:09:09.997898 Event: Test Succeed
+On: 2011-10-20 14:09:14.038652 Event:
+On: 2011-10-20 14:09:14.038710 Event: init Caller
+On: 2011-10-20 14:09:14.038731 Event: GSMRZ2
+On: 2011-10-20 14:09:21.048631 Event: Connected to Caller Handler
+On: 2011-10-20 14:09:21.055884 Event: Caller Handler respond
+On: 2011-10-20 14:09:21.058084 Event: Caller handler : Ready
+On: 2011-10-20 14:09:21.058117 Event: init Receiver
+On: 2011-10-20 14:09:21.058139 Event: GSMExt.Tm
+On: 2011-10-20 14:09:23.063418 Event: Connected to Receiver Handler
+On: 2011-10-20 14:09:23.063701 Event: Receiver Handler respond
+On: 2011-10-20 14:09:23.063884 Event: Receiver handler : Ready
+On: 2011-10-20 14:09:23.063913 Event: Start Call
+On: 2011-10-20 14:09:23.065836 Event: Waiting Feedback
+On: 2011-10-20 14:09:38.066033 Event: Test Failed
+On: 2011-10-20 14:09:42.147137 Event:
+On: 2011-10-20 14:09:42.147199 Event: init Caller
+On: 2011-10-20 14:09:42.147219 Event: landline
+On: 2011-10-20 14:09:44.158233 Event: Connected to Caller Handler
+On: 2011-10-20 14:09:44.158522 Event: Caller Handler respond
+On: 2011-10-20 14:09:44.161180 Event: Caller handler : Ready
+On: 2011-10-20 14:09:44.161216 Event: init Receiver
+On: 2011-10-20 14:09:44.161238 Event: GSMRZ3
+On: 2011-10-20 14:09:51.169059 Event: Connected to Receiver Handler
+On: 2011-10-20 14:09:51.177493 Event: Receiver Handler respond
+On: 2011-10-20 14:09:51.180250 Event: Receiver handler : Ready
+On: 2011-10-20 14:09:51.180304 Event: Start Call
+On: 2011-10-20 14:09:51.180375 Event: Waiting Feedback
+On: 2011-10-20 14:09:59.202290 Event: Test Succeed
+On: 2011-10-20 14:10:03.239158 Event:
+On: 2011-10-20 14:10:03.239218 Event: init Caller
+On: 2011-10-20 14:10:03.239238 Event: GSMRZ3
+On: 2011-10-20 14:10:10.249124 Event: Connected to Caller Handler
+On: 2011-10-20 14:10:10.256806 Event: Caller Handler respond
+On: 2011-10-20 14:10:10.259295 Event: Caller handler : Ready
+On: 2011-10-20 14:10:10.259348 Event: init Receiver
+On: 2011-10-20 14:10:10.259371 Event: sip
+On: 2011-10-20 14:10:12.262817 Event: Connected to Receiver Handler
+On: 2011-10-20 14:10:12.263210 Event: Receiver Handler respond
+On: 2011-10-20 14:10:12.263974 Event: Receiver handler : Ready
+On: 2011-10-20 14:10:12.264012 Event: Start Call
+On: 2011-10-20 14:10:12.264169 Event: Waiting Feedback
+On: 2011-10-20 14:10:16.083863 Event: Test Succeed
+On: 2011-10-20 14:10:20.124689 Event:
+On: 2011-10-20 14:10:20.124748 Event: init Caller
+On: 2011-10-20 14:10:20.124769 Event: sip
+On: 2011-10-20 14:10:22.129793 Event: Connected to Caller Handler
+On: 2011-10-20 14:10:22.130192 Event: Caller Handler respond
+On: 2011-10-20 14:10:22.130939 Event: Caller handler : Ready
+On: 2011-10-20 14:10:22.130979 Event: init Receiver
+On: 2011-10-20 14:10:22.130999 Event: GSMExt.Eplus
+On: 2011-10-20 14:10:24.134635 Event: Connected to Receiver Handler
+On: 2011-10-20 14:10:24.134921 Event: Receiver Handler respond
+On: 2011-10-20 14:10:24.135107 Event: Receiver handler : Ready
+On: 2011-10-20 14:10:24.135137 Event: Start Call
+On: 2011-10-20 14:10:24.135192 Event: Waiting Feedback
+On: 2011-10-20 14:10:39.135351 Event: Test Failed
+On: 2011-10-20 14:10:43.213759 Event:
+On: 2011-10-20 14:10:43.213825 Event: init Caller
+On: 2011-10-20 14:10:43.213845 Event: sip
+On: 2011-10-20 14:10:45.218820 Event: Connected to Caller Handler
+On: 2011-10-20 14:10:45.219206 Event: Caller Handler respond
+On: 2011-10-20 14:10:45.220583 Event: Caller handler : Ready
+On: 2011-10-20 14:10:45.220622 Event: init Receiver
+On: 2011-10-20 14:10:45.220643 Event: GSMExt.O2
+On: 2011-10-20 14:10:47.226160 Event: Connected to Receiver Handler
+On: 2011-10-20 14:10:47.226446 Event: Receiver Handler respond
+On: 2011-10-20 14:10:47.226627 Event: Receiver handler : Ready
+On: 2011-10-20 14:10:47.226657 Event: Start Call
+On: 2011-10-20 14:10:47.226713 Event: Waiting Feedback
+On: 2011-10-20 14:11:02.226862 Event: Test Failed
+On: 2011-10-20 14:11:06.305881 Event:
+On: 2011-10-20 14:11:06.305948 Event: init Caller
+On: 2011-10-20 14:11:06.305968 Event: sip
+On: 2011-10-20 14:11:08.311050 Event: Connected to Caller Handler
+On: 2011-10-20 14:11:08.311446 Event: Caller Handler respond
+On: 2011-10-20 14:11:08.312213 Event: Caller handler : Ready
+On: 2011-10-20 14:11:08.312251 Event: init Receiver
+On: 2011-10-20 14:11:08.312272 Event: GSMExt.Voda
+On: 2011-10-20 14:11:10.315629 Event: Connected to Receiver Handler
+On: 2011-10-20 14:11:10.315939 Event: Receiver Handler respond
+On: 2011-10-20 14:11:10.316134 Event: Receiver handler : Ready
+On: 2011-10-20 14:11:10.316164 Event: Start Call
+On: 2011-10-20 14:11:10.316220 Event: Waiting Feedback
+On: 2011-10-20 14:11:25.316377 Event: Test Failed
+On: 2011-10-20 14:11:29.390139 Event:
+On: 2011-10-20 14:11:29.390203 Event: init Caller
+On: 2011-10-20 14:11:29.390223 Event: sip
+On: 2011-10-20 14:11:31.398646 Event: Connected to Caller Handler
+On: 2011-10-20 14:11:31.399041 Event: Caller Handler respond
+On: 2011-10-20 14:11:31.399802 Event: Caller handler : Ready
+On: 2011-10-20 14:11:31.399839 Event: init Receiver
+On: 2011-10-20 14:11:31.399860 Event: GSMExt.Tm
+On: 2011-10-20 14:11:33.405236 Event: Connected to Receiver Handler
+On: 2011-10-20 14:11:33.405527 Event: Receiver Handler respond
+On: 2011-10-20 14:11:33.405753 Event: Receiver handler : Ready
+On: 2011-10-20 14:11:33.405784 Event: Start Call
+On: 2011-10-20 14:11:33.405842 Event: Waiting Feedback
+On: 2011-10-20 14:11:48.406003 Event: Test Failed
+On: 2011-10-20 14:11:52.464407 Event:
+On: 2011-10-20 14:11:52.464468 Event: init Caller
+On: 2011-10-20 14:11:52.464488 Event: sip
+On: 2011-10-20 14:11:54.478555 Event: Connected to Caller Handler
+On: 2011-10-20 14:11:54.478856 Event: Caller Handler respond
+On: 2011-10-20 14:11:54.479619 Event: Caller handler : Ready
+On: 2011-10-20 14:11:54.479657 Event: init Receiver
+On: 2011-10-20 14:11:54.479678 Event: GSMRZ2
+On: 2011-10-20 14:12:01.485037 Event: Connected to Receiver Handler
+On: 2011-10-20 14:12:01.492198 Event: Receiver Handler respond
+On: 2011-10-20 14:12:01.494359 Event: Receiver handler : Ready
+On: 2011-10-20 14:12:01.494395 Event: Start Call
+On: 2011-10-20 14:12:01.494454 Event: Waiting Feedback
+On: 2011-10-20 14:12:06.223095 Event: Test Succeed
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:14:43.686359 ------------------
+On: 2011-10-20 14:14:43.686434 Event: init Caller
+On: 2011-10-20 14:14:43.686458 Event: unisip
+On: 2011-10-20 14:14:45.690821 Event: Connected to Caller Handler
+On: 2011-10-20 14:14:45.691125 Event: Caller Handler respond
+On: 2011-10-20 14:14:45.691870 Event: Caller handler : Ready
+On: 2011-10-20 14:14:45.691906 Event: init Receiver
+On: 2011-10-20 14:14:45.691927 Event: GSMRZ1
+On: 2011-10-20 14:14:47.697340 Event: Connected to Receiver Handler
+On: 2011-10-20 14:14:47.697627 Event: Receiver Handler respond
+On: 2011-10-20 14:14:47.697994 Event: Receiver handler : Ready
+On: 2011-10-20 14:14:47.698035 Event: Start Call
+On: 2011-10-20 14:14:47.698116 Event: Waiting Feedback
+On: 2011-10-20 14:14:53.685874 Event: Test Succeed
+On: 2011-10-20 14:14:57.726756 Event:
+On: 2011-10-20 14:14:57.726817 Event: init Caller
+On: 2011-10-20 14:14:57.726837 Event: GSMRZ2
+On: 2011-10-20 14:15:04.736761 Event: Connected to Caller Handler
+On: 2011-10-20 14:15:04.743800 Event: Caller Handler respond
+On: 2011-10-20 14:15:04.746889 Event: Caller handler : Ready
+On: 2011-10-20 14:15:04.746931 Event: init Receiver
+On: 2011-10-20 14:15:04.746952 Event: GSMExt.Tm
+On: 2011-10-20 14:15:06.752102 Event: Connected to Receiver Handler
+On: 2011-10-20 14:15:06.752382 Event: Receiver Handler respond
+On: 2011-10-20 14:15:06.752564 Event: Receiver handler : Ready
+On: 2011-10-20 14:15:06.752594 Event: Start Call
+On: 2011-10-20 14:15:06.753970 Event: Waiting Feedback
+On: 2011-10-20 14:15:21.754181 Event: Test Failed
+On: 2011-10-20 14:15:25.835456 Event:
+On: 2011-10-20 14:15:25.835518 Event: init Caller
+On: 2011-10-20 14:15:25.835538 Event: landline
+On: 2011-10-20 14:15:27.844856 Event: Connected to Caller Handler
+On: 2011-10-20 14:15:27.845238 Event: Caller Handler respond
+On: 2011-10-20 14:15:27.848655 Event: Caller handler : Ready
+On: 2011-10-20 14:15:27.848691 Event: init Receiver
+On: 2011-10-20 14:15:27.848713 Event: GSMRZ3
+On: 2011-10-20 14:15:34.858261 Event: Connected to Receiver Handler
+On: 2011-10-20 14:15:34.864956 Event: Receiver Handler respond
+On: 2011-10-20 14:15:34.867077 Event: Receiver handler : Ready
+On: 2011-10-20 14:15:34.867115 Event: Start Call
+On: 2011-10-20 14:15:34.867176 Event: Waiting Feedback
+On: 2011-10-20 14:15:42.874755 Event: Test Succeed
+On: 2011-10-20 14:15:46.912673 Event:
+On: 2011-10-20 14:15:46.912733 Event: init Caller
+On: 2011-10-20 14:15:46.912753 Event: GSMRZ3
+On: 2011-10-20 14:15:53.922914 Event: Connected to Caller Handler
+On: 2011-10-20 14:15:53.929899 Event: Caller Handler respond
+On: 2011-10-20 14:15:53.933262 Event: Caller handler : Ready
+On: 2011-10-20 14:15:53.933307 Event: init Receiver
+On: 2011-10-20 14:15:53.933330 Event: sip
+On: 2011-10-20 14:15:55.938322 Event: Connected to Receiver Handler
+On: 2011-10-20 14:15:55.938712 Event: Receiver Handler respond
+On: 2011-10-20 14:15:55.939838 Event: Receiver handler : Ready
+On: 2011-10-20 14:15:55.939878 Event: Start Call
+On: 2011-10-20 14:15:55.940031 Event: Waiting Feedback
+On: 2011-10-20 14:15:59.285836 Event: Test Succeed
+On: 2011-10-20 14:16:03.326573 Event:
+On: 2011-10-20 14:16:03.326633 Event: init Caller
+On: 2011-10-20 14:16:03.326654 Event: sip
+On: 2011-10-20 14:16:05.331504 Event: Connected to Caller Handler
+On: 2011-10-20 14:16:05.331897 Event: Caller Handler respond
+On: 2011-10-20 14:16:05.332666 Event: Caller handler : Ready
+On: 2011-10-20 14:16:05.332704 Event: init Receiver
+On: 2011-10-20 14:16:05.332726 Event: GSMExt.Eplus
+On: 2011-10-20 14:16:07.338151 Event: Connected to Receiver Handler
+On: 2011-10-20 14:16:07.338435 Event: Receiver Handler respond
+On: 2011-10-20 14:16:07.338619 Event: Receiver handler : Ready
+On: 2011-10-20 14:16:07.338650 Event: Start Call
+On: 2011-10-20 14:16:07.338704 Event: Waiting Feedback
+On: 2011-10-20 14:16:22.338866 Event: Test Failed
+On: 2011-10-20 14:16:26.412927 Event:
+On: 2011-10-20 14:16:26.412989 Event: init Caller
+On: 2011-10-20 14:16:26.413009 Event: sip
+On: 2011-10-20 14:16:28.423094 Event: Connected to Caller Handler
+On: 2011-10-20 14:16:28.423393 Event: Caller Handler respond
+On: 2011-10-20 14:16:28.424548 Event: Caller handler : Ready
+On: 2011-10-20 14:16:28.424586 Event: init Receiver
+On: 2011-10-20 14:16:28.424608 Event: GSMExt.O2
+On: 2011-10-20 14:16:30.430824 Event: Connected to Receiver Handler
+On: 2011-10-20 14:16:30.431110 Event: Receiver Handler respond
+On: 2011-10-20 14:16:30.431288 Event: Receiver handler : Ready
+On: 2011-10-20 14:16:30.431317 Event: Start Call
+On: 2011-10-20 14:16:30.431369 Event: Waiting Feedback
+On: 2011-10-20 14:16:45.431523 Event: Test Failed
+On: 2011-10-20 14:16:49.506138 Event:
+On: 2011-10-20 14:16:49.506202 Event: init Caller
+On: 2011-10-20 14:16:49.506222 Event: sip
+On: 2011-10-20 14:16:51.514417 Event: Connected to Caller Handler
+On: 2011-10-20 14:16:51.514805 Event: Caller Handler respond
+On: 2011-10-20 14:16:51.515901 Event: Caller handler : Ready
+On: 2011-10-20 14:16:51.515940 Event: init Receiver
+On: 2011-10-20 14:16:51.515961 Event: GSMExt.Voda
+On: 2011-10-20 14:16:53.521339 Event: Connected to Receiver Handler
+On: 2011-10-20 14:16:53.521620 Event: Receiver Handler respond
+On: 2011-10-20 14:16:53.521980 Event: Receiver handler : Ready
+On: 2011-10-20 14:16:53.522023 Event: Start Call
+On: 2011-10-20 14:16:53.522095 Event: Waiting Feedback
+On: 2011-10-20 14:17:08.522254 Event: Test Failed
+On: 2011-10-20 14:17:12.600365 Event:
+On: 2011-10-20 14:17:12.600427 Event: init Caller
+On: 2011-10-20 14:17:12.600447 Event: sip
+On: 2011-10-20 14:17:14.606669 Event: Connected to Caller Handler
+On: 2011-10-20 14:17:14.607059 Event: Caller Handler respond
+On: 2011-10-20 14:17:14.608133 Event: Caller handler : Ready
+On: 2011-10-20 14:17:14.608170 Event: init Receiver
+On: 2011-10-20 14:17:14.608192 Event: GSMExt.Tm
+On: 2011-10-20 14:17:16.613802 Event: Connected to Receiver Handler
+On: 2011-10-20 14:17:16.614096 Event: Receiver Handler respond
+On: 2011-10-20 14:17:16.614278 Event: Receiver handler : Ready
+On: 2011-10-20 14:17:16.614308 Event: Start Call
+On: 2011-10-20 14:17:16.614362 Event: Waiting Feedback
+On: 2011-10-20 14:17:31.614518 Event: Test Failed
+On: 2011-10-20 14:17:35.673049 Event:
+On: 2011-10-20 14:17:35.673108 Event: init Caller
+On: 2011-10-20 14:17:35.673129 Event: sip
+On: 2011-10-20 14:17:37.687613 Event: Connected to Caller Handler
+On: 2011-10-20 14:17:37.688003 Event: Caller Handler respond
+On: 2011-10-20 14:17:37.688772 Event: Caller handler : Ready
+On: 2011-10-20 14:17:37.688810 Event: init Receiver
+On: 2011-10-20 14:17:37.688831 Event: GSMRZ2
+On: 2011-10-20 14:17:44.694268 Event: Connected to Receiver Handler
+On: 2011-10-20 14:17:44.701742 Event: Receiver Handler respond
+On: 2011-10-20 14:17:44.703874 Event: Receiver handler : Ready
+On: 2011-10-20 14:17:44.703909 Event: Start Call
+On: 2011-10-20 14:17:44.703968 Event: Waiting Feedback
+On: 2011-10-20 14:17:49.902230 Event: Test Succeed
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:20:11.092385 ------------------
+On: 2011-10-20 14:20:11.092462 Event: init Caller
+On: 2011-10-20 14:20:11.092486 Event: unisip
+On: 2011-10-20 14:20:13.097531 Event: Connected to Caller Handler
+On: 2011-10-20 14:20:13.097989 Event: Caller Handler respond
+On: 2011-10-20 14:20:13.098758 Event: Caller handler : Ready
+On: 2011-10-20 14:20:13.098795 Event: init Receiver
+On: 2011-10-20 14:20:13.098816 Event: GSMRZ3
+On: 2011-10-20 14:20:20.106313 Event: Connected to Receiver Handler
+On: 2011-10-20 14:20:20.113021 Event: Receiver Handler respond
+On: 2011-10-20 14:20:20.116435 Event: Receiver handler : Ready
+On: 2011-10-20 14:20:20.116495 Event: Start Call
+On: 2011-10-20 14:20:20.116632 Event: Waiting Feedback
+On: 2011-10-20 14:20:25.023073 Event: Test Succeed
+On: 2011-10-20 14:20:29.062734 Event:
+On: 2011-10-20 14:20:29.062796 Event: init Caller
+On: 2011-10-20 14:20:29.062816 Event: GSMRZ1
+On: 2011-10-20 14:20:31.067790 Event: Connected to Caller Handler
+On: 2011-10-20 14:20:31.068070 Event: Caller Handler respond
+On: 2011-10-20 14:20:31.068259 Event: Caller handler : Ready
+On: 2011-10-20 14:20:31.068287 Event: init Receiver
+On: 2011-10-20 14:20:31.068306 Event: GSMRZ2
+On: 2011-10-20 14:20:38.078457 Event: Connected to Receiver Handler
+On: 2011-10-20 14:20:38.085818 Event: Receiver Handler respond
+On: 2011-10-20 14:20:38.088708 Event: Receiver handler : Ready
+On: 2011-10-20 14:20:38.088755 Event: Start Call
+On: 2011-10-20 14:20:38.093747 Event: Waiting Feedback
+On: 2011-10-20 14:20:42.681854 Event: Test Succeed
+On: 2011-10-20 14:20:46.728609 Event:
+On: 2011-10-20 14:20:46.728670 Event: init Caller
+On: 2011-10-20 14:20:46.728690 Event: landline
+On: 2011-10-20 14:20:48.733495 Event: Connected to Caller Handler
+On: 2011-10-20 14:20:48.733931 Event: Caller Handler respond
+On: 2011-10-20 14:20:48.736421 Event: Caller handler : Ready
+On: 2011-10-20 14:20:48.736460 Event: init Receiver
+On: 2011-10-20 14:20:48.736481 Event: GSMRZ2
+On: 2011-10-20 14:20:55.741925 Event: Connected to Receiver Handler
+On: 2011-10-20 14:20:55.749278 Event: Receiver Handler respond
+On: 2011-10-20 14:20:55.751497 Event: Receiver handler : Ready
+On: 2011-10-20 14:20:55.751535 Event: Start Call
+On: 2011-10-20 14:20:55.751595 Event: Waiting Feedback
+On: 2011-10-20 14:21:13.940353 Event: Test Succeed
+On: 2011-10-20 14:21:17.978743 Event:
+On: 2011-10-20 14:21:17.978802 Event: init Caller
+On: 2011-10-20 14:21:17.978822 Event: GSMRZ2
+On: 2011-10-20 14:21:24.988629 Event: Connected to Caller Handler
+On: 2011-10-20 14:21:24.995624 Event: Caller Handler respond
+On: 2011-10-20 14:21:24.998704 Event: Caller handler : Ready
+On: 2011-10-20 14:21:24.998762 Event: init Receiver
+On: 2011-10-20 14:21:24.998785 Event: sip
+On: 2011-10-20 14:21:27.003578 Event: Connected to Receiver Handler
+On: 2011-10-20 14:21:27.003977 Event: Receiver Handler respond
+On: 2011-10-20 14:21:27.004735 Event: Receiver handler : Ready
+On: 2011-10-20 14:21:27.004777 Event: Start Call
+On: 2011-10-20 14:21:27.004939 Event: Waiting Feedback
+On: 2011-10-20 14:21:30.450976 Event: Test Succeed
+On: 2011-10-20 14:21:34.514747 Event:
+On: 2011-10-20 14:21:34.514804 Event: init Caller
+On: 2011-10-20 14:21:34.514824 Event: sip
+On: 2011-10-20 14:21:36.519356 Event: Connected to Caller Handler
+On: 2011-10-20 14:21:36.519653 Event: Caller Handler respond
+On: 2011-10-20 14:21:36.520773 Event: Caller handler : Ready
+On: 2011-10-20 14:21:36.520811 Event: init Receiver
+On: 2011-10-20 14:21:36.520831 Event: GSMExt.Eplus
+On: 2011-10-20 14:21:38.536780 Event: Connected to Receiver Handler
+On: 2011-10-20 14:21:38.537060 Event: Receiver Handler respond
+On: 2011-10-20 14:21:38.537240 Event: Receiver handler : Ready
+On: 2011-10-20 14:21:38.537271 Event: Start Call
+On: 2011-10-20 14:21:38.537326 Event: Waiting Feedback
+On: 2011-10-20 14:21:53.537481 Event: Test Failed
+On: 2011-10-20 14:21:57.616161 Event:
+On: 2011-10-20 14:21:57.616226 Event: init Caller
+On: 2011-10-20 14:21:57.616247 Event: sip
+On: 2011-10-20 14:21:59.622401 Event: Connected to Caller Handler
+On: 2011-10-20 14:21:59.622794 Event: Caller Handler respond
+On: 2011-10-20 14:21:59.623871 Event: Caller handler : Ready
+On: 2011-10-20 14:21:59.623908 Event: init Receiver
+On: 2011-10-20 14:21:59.623929 Event: GSMExt.O2
+On: 2011-10-20 14:22:01.629274 Event: Connected to Receiver Handler
+On: 2011-10-20 14:22:01.629559 Event: Receiver Handler respond
+On: 2011-10-20 14:22:01.629919 Event: Receiver handler : Ready
+On: 2011-10-20 14:22:01.629963 Event: Start Call
+On: 2011-10-20 14:22:01.630038 Event: Waiting Feedback
+On: 2011-10-20 14:22:16.630194 Event: Test Failed
+On: 2011-10-20 14:22:20.708157 Event:
+On: 2011-10-20 14:22:20.708220 Event: init Caller
+On: 2011-10-20 14:22:20.708240 Event: sip
+On: 2011-10-20 14:22:22.714207 Event: Connected to Caller Handler
+On: 2011-10-20 14:22:22.714597 Event: Caller Handler respond
+On: 2011-10-20 14:22:22.715355 Event: Caller handler : Ready
+On: 2011-10-20 14:22:22.715392 Event: init Receiver
+On: 2011-10-20 14:22:22.715413 Event: GSMExt.Tm
+On: 2011-10-20 14:22:24.718631 Event: Connected to Receiver Handler
+On: 2011-10-20 14:22:24.718913 Event: Receiver Handler respond
+On: 2011-10-20 14:22:24.719092 Event: Receiver handler : Ready
+On: 2011-10-20 14:22:24.719124 Event: Start Call
+On: 2011-10-20 14:22:24.719178 Event: Waiting Feedback
+On: 2011-10-20 14:22:39.719334 Event: Test Failed
+On: 2011-10-20 14:22:43.796319 Event:
+On: 2011-10-20 14:22:43.796383 Event: init Caller
+On: 2011-10-20 14:22:43.796403 Event: sip
+On: 2011-10-20 14:22:45.801153 Event: Connected to Caller Handler
+On: 2011-10-20 14:22:45.801446 Event: Caller Handler respond
+On: 2011-10-20 14:22:45.802386 Event: Caller handler : Ready
+On: 2011-10-20 14:22:45.802428 Event: init Receiver
+On: 2011-10-20 14:22:45.802449 Event: GSMExt.Voda
+On: 2011-10-20 14:22:47.806624 Event: Connected to Receiver Handler
+On: 2011-10-20 14:22:47.806912 Event: Receiver Handler respond
+On: 2011-10-20 14:22:47.807094 Event: Receiver handler : Ready
+On: 2011-10-20 14:22:47.807124 Event: Start Call
+On: 2011-10-20 14:22:47.807179 Event: Waiting Feedback
+On: 2011-10-20 14:23:02.807334 Event: Test Failed
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:25:11.854651 ------------------
+On: 2011-10-20 14:25:11.854722 Event: init Caller
+On: 2011-10-20 14:25:11.854746 Event: unisip
+On: 2011-10-20 14:25:13.859816 Event: Connected to Caller Handler
+On: 2011-10-20 14:25:13.860119 Event: Caller Handler respond
+On: 2011-10-20 14:25:13.860881 Event: Caller handler : Ready
+On: 2011-10-20 14:25:13.860919 Event: init Receiver
+On: 2011-10-20 14:25:13.860940 Event: GSMRZ3
+On: 2011-10-20 14:25:20.866295 Event: Connected to Receiver Handler
+On: 2011-10-20 14:25:20.874049 Event: Receiver Handler respond
+On: 2011-10-20 14:25:20.876230 Event: Receiver handler : Ready
+On: 2011-10-20 14:25:20.876269 Event: Start Call
+On: 2011-10-20 14:25:20.876326 Event: Waiting Feedback
+On: 2011-10-20 14:25:26.355519 Event: Test Succeed
+On: 2011-10-20 14:25:30.399221 Event:
+On: 2011-10-20 14:25:30.399277 Event: init Caller
+On: 2011-10-20 14:25:30.399297 Event: GSMRZ1
+On: 2011-10-20 14:25:32.404212 Event: Connected to Caller Handler
+On: 2011-10-20 14:25:32.404474 Event: Caller Handler respond
+On: 2011-10-20 14:25:32.404663 Event: Caller handler : Ready
+On: 2011-10-20 14:25:32.404692 Event: init Receiver
+On: 2011-10-20 14:25:32.404711 Event: GSMExt.Voda
+On: 2011-10-20 14:25:34.409938 Event: Connected to Receiver Handler
+On: 2011-10-20 14:25:34.410222 Event: Receiver Handler respond
+On: 2011-10-20 14:25:34.410407 Event: Receiver handler : Ready
+On: 2011-10-20 14:25:34.410440 Event: Start Call
+On: 2011-10-20 14:25:34.417741 Event: Waiting Feedback
+On: 2011-10-20 14:25:49.417939 Event: Test Failed
+On: 2011-10-20 14:25:53.492610 Event:
+On: 2011-10-20 14:25:53.492671 Event: init Caller
+On: 2011-10-20 14:25:53.492691 Event: landline
+On: 2011-10-20 14:25:55.504524 Event: Connected to Caller Handler
+On: 2011-10-20 14:25:55.504905 Event: Caller Handler respond
+On: 2011-10-20 14:25:55.507397 Event: Caller handler : Ready
+On: 2011-10-20 14:25:55.507436 Event: init Receiver
+On: 2011-10-20 14:25:55.507458 Event: GSMRZ3
+On: 2011-10-20 14:26:02.510721 Event: Connected to Receiver Handler
+On: 2011-10-20 14:26:02.518007 Event: Receiver Handler respond
+On: 2011-10-20 14:26:02.521248 Event: Receiver handler : Ready
+On: 2011-10-20 14:26:02.521294 Event: Start Call
+On: 2011-10-20 14:26:02.521353 Event: Waiting Feedback
+On: 2011-10-20 14:26:11.635701 Event: Test Succeed
+On: 2011-10-20 14:26:15.671752 Event:
+On: 2011-10-20 14:26:15.671810 Event: init Caller
+On: 2011-10-20 14:26:15.671830 Event: GSMRZ3
+On: 2011-10-20 14:26:22.681562 Event: Connected to Caller Handler
+On: 2011-10-20 14:26:22.689376 Event: Caller Handler respond
+On: 2011-10-20 14:26:22.691487 Event: Caller handler : Ready
+On: 2011-10-20 14:26:22.691520 Event: init Receiver
+On: 2011-10-20 14:26:22.691542 Event: sip
+On: 2011-10-20 14:26:24.696480 Event: Connected to Receiver Handler
+On: 2011-10-20 14:26:24.696875 Event: Receiver Handler respond
+On: 2011-10-20 14:26:24.697643 Event: Receiver handler : Ready
+On: 2011-10-20 14:26:24.697685 Event: Start Call
+On: 2011-10-20 14:26:24.697903 Event: Waiting Feedback
+On: 2011-10-20 14:26:28.014077 Event: Test Succeed
+On: 2011-10-20 14:26:32.054988 Event:
+On: 2011-10-20 14:26:32.055044 Event: init Caller
+On: 2011-10-20 14:26:32.055064 Event: sip
+On: 2011-10-20 14:26:34.058384 Event: Connected to Caller Handler
+On: 2011-10-20 14:26:34.058762 Event: Caller Handler respond
+On: 2011-10-20 14:26:34.059523 Event: Caller handler : Ready
+On: 2011-10-20 14:26:34.059556 Event: init Receiver
+On: 2011-10-20 14:26:34.059577 Event: GSMExt.Eplus
+On: 2011-10-20 14:26:36.062635 Event: Connected to Receiver Handler
+On: 2011-10-20 14:26:36.062905 Event: Receiver Handler respond
+On: 2011-10-20 14:26:36.063084 Event: Receiver handler : Ready
+On: 2011-10-20 14:26:36.063117 Event: Start Call
+On: 2011-10-20 14:26:36.063171 Event: Waiting Feedback
+On: 2011-10-20 14:26:51.063329 Event: Test Failed
+On: 2011-10-20 14:26:55.136188 Event:
+On: 2011-10-20 14:26:55.136249 Event: init Caller
+On: 2011-10-20 14:26:55.136268 Event: sip
+On: 2011-10-20 14:26:57.146216 Event: Connected to Caller Handler
+On: 2011-10-20 14:26:57.146598 Event: Caller Handler respond
+On: 2011-10-20 14:26:57.147667 Event: Caller handler : Ready
+On: 2011-10-20 14:26:57.147705 Event: init Receiver
+On: 2011-10-20 14:26:57.147725 Event: GSMExt.O2
+On: 2011-10-20 14:26:59.152928 Event: Connected to Receiver Handler
+On: 2011-10-20 14:26:59.153204 Event: Receiver Handler respond
+On: 2011-10-20 14:26:59.153386 Event: Receiver handler : Ready
+On: 2011-10-20 14:26:59.153420 Event: Start Call
+On: 2011-10-20 14:26:59.153472 Event: Waiting Feedback
+On: 2011-10-20 14:27:14.153626 Event: Test Failed
+On: 2011-10-20 14:27:18.230126 Event:
+On: 2011-10-20 14:27:18.230188 Event: init Caller
+On: 2011-10-20 14:27:18.230207 Event: sip
+On: 2011-10-20 14:27:20.235493 Event: Connected to Caller Handler
+On: 2011-10-20 14:27:20.235862 Event: Caller Handler respond
+On: 2011-10-20 14:27:20.236618 Event: Caller handler : Ready
+On: 2011-10-20 14:27:20.236656 Event: init Receiver
+On: 2011-10-20 14:27:20.236676 Event: GSMExt.Tm
+On: 2011-10-20 14:27:22.241990 Event: Connected to Receiver Handler
+On: 2011-10-20 14:27:22.242269 Event: Receiver Handler respond
+On: 2011-10-20 14:27:22.242453 Event: Receiver handler : Ready
+On: 2011-10-20 14:27:22.242487 Event: Start Call
+On: 2011-10-20 14:27:22.242540 Event: Waiting Feedback
+On: 2011-10-20 14:27:37.242695 Event: Test Failed
+On: 2011-10-20 14:27:41.300442 Event:
+On: 2011-10-20 14:27:41.300499 Event: init Caller
+On: 2011-10-20 14:27:41.300518 Event: sip
+On: 2011-10-20 14:27:43.312620 Event: Connected to Caller Handler
+On: 2011-10-20 14:27:43.313005 Event: Caller Handler respond
+On: 2011-10-20 14:27:43.313922 Event: Caller handler : Ready
+On: 2011-10-20 14:27:43.313966 Event: init Receiver
+On: 2011-10-20 14:27:43.313987 Event: GSMRZ2
+On: 2011-10-20 14:27:50.322271 Event: Connected to Receiver Handler
+On: 2011-10-20 14:27:50.329559 Event: Receiver Handler respond
+On: 2011-10-20 14:27:50.331865 Event: Receiver handler : Ready
+On: 2011-10-20 14:27:50.331903 Event: Start Call
+On: 2011-10-20 14:27:50.331961 Event: Waiting Feedback
+On: 2011-10-20 14:27:56.030846 Event: Test Succeed
+On: 2011-10-20 14:28:00.072668 Event:
+On: 2011-10-20 14:28:00.072725 Event: init Caller
+On: 2011-10-20 14:28:00.072745 Event: sip
+On: 2011-10-20 14:28:02.077887 Event: Connected to Caller Handler
+On: 2011-10-20 14:28:02.078273 Event: Caller Handler respond
+On: 2011-10-20 14:28:02.079044 Event: Caller handler : Ready
+On: 2011-10-20 14:28:02.079081 Event: init Receiver
+On: 2011-10-20 14:28:02.079102 Event: GSMExt.Voda
+On: 2011-10-20 14:28:04.082620 Event: Connected to Receiver Handler
+On: 2011-10-20 14:28:04.082899 Event: Receiver Handler respond
+On: 2011-10-20 14:28:04.083080 Event: Receiver handler : Ready
+On: 2011-10-20 14:28:04.083115 Event: Start Call
+On: 2011-10-20 14:28:04.083167 Event: Waiting Feedback
+On: 2011-10-20 14:28:19.083322 Event: Test Failed
+On: 2011-10-20 14:28:23.158141 Event:
+On: 2011-10-20 14:28:23.158201 Event: init Caller
+On: 2011-10-20 14:28:23.158220 Event: sip
+On: 2011-10-20 14:28:25.166058 Event: Connected to Caller Handler
+On: 2011-10-20 14:28:25.166439 Event: Caller Handler respond
+On: 2011-10-20 14:28:25.167206 Event: Caller handler : Ready
+On: 2011-10-20 14:28:25.167243 Event: init Receiver
+On: 2011-10-20 14:28:25.167264 Event: GSMRZ1
+On: 2011-10-20 14:28:27.170611 Event: Connected to Receiver Handler
+On: 2011-10-20 14:28:27.170887 Event: Receiver Handler respond
+On: 2011-10-20 14:28:27.171068 Event: Receiver handler : Ready
+On: 2011-10-20 14:28:27.171100 Event: Start Call
+On: 2011-10-20 14:28:27.171153 Event: Waiting Feedback
+On: 2011-10-20 14:28:32.769877 Event: Test Succeed
+On: 2011-10-20 14:28:36.822568 Event:
+On: 2011-10-20 14:28:36.822627 Event: init Caller
+On: 2011-10-20 14:28:36.822647 Event: GSMRZ1
+On: 2011-10-20 14:28:38.830375 Event: Connected to Caller Handler
+On: 2011-10-20 14:28:38.830661 Event: Caller Handler respond
+On: 2011-10-20 14:28:38.830852 Event: Caller handler : Ready
+On: 2011-10-20 14:28:38.830883 Event: init Receiver
+On: 2011-10-20 14:28:38.830901 Event: GSMRZ2
+On: 2011-10-20 14:28:45.838271 Event: Connected to Receiver Handler
+On: 2011-10-20 14:28:45.845851 Event: Receiver Handler respond
+On: 2011-10-20 14:28:45.848100 Event: Receiver handler : Ready
+On: 2011-10-20 14:28:45.848157 Event: Start Call
+On: 2011-10-20 14:28:45.849754 Event: Waiting Feedback
+On: 2011-10-20 14:28:49.449874 Event: Test Succeed
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:32:13.593767 ------------------
+On: 2011-10-20 14:32:13.593846 Event: init Caller
+On: 2011-10-20 14:32:13.593870 Event: unisip
+On: 2011-10-20 14:32:15.599033 Event: Connected to Caller Handler
+On: 2011-10-20 14:32:15.599349 Event: Caller Handler respond
+On: 2011-10-20 14:32:15.600483 Event: Caller handler : Ready
+On: 2011-10-20 14:32:15.600524 Event: init Receiver
+On: 2011-10-20 14:32:15.600545 Event: GSMRZ1
+On: 2011-10-20 14:32:17.605962 Event: Connected to Receiver Handler
+On: 2011-10-20 14:32:17.606247 Event: Receiver Handler respond
+On: 2011-10-20 14:32:17.606420 Event: Receiver handler : Ready
+On: 2011-10-20 14:32:17.606445 Event: Start Call
+On: 2011-10-20 14:32:17.606496 Event: Waiting Feedback
+On: 2011-10-20 14:32:24.185901 Event: Test Succeed
+On: 2011-10-20 14:32:28.226894 Event:
+On: 2011-10-20 14:32:28.226954 Event: init Caller
+On: 2011-10-20 14:32:28.226973 Event: GSMRZ2
+On: 2011-10-20 14:32:35.235363 Event: Connected to Caller Handler
+On: 2011-10-20 14:32:35.242632 Event: Caller Handler respond
+On: 2011-10-20 14:32:35.245562 Event: Caller handler : Ready
+On: 2011-10-20 14:32:35.245603 Event: init Receiver
+On: 2011-10-20 14:32:35.245625 Event: GSMExt.Voda
+On: 2011-10-20 14:32:37.250887 Event: Connected to Receiver Handler
+On: 2011-10-20 14:32:37.251164 Event: Receiver Handler respond
+On: 2011-10-20 14:32:37.251343 Event: Receiver handler : Ready
+On: 2011-10-20 14:32:37.251374 Event: Start Call
+On: 2011-10-20 14:32:37.254328 Event: Waiting Feedback
+On: 2011-10-20 14:32:52.254547 Event: Test Failed
+On: 2011-10-20 14:32:56.335265 Event:
+On: 2011-10-20 14:32:56.335331 Event: init Caller
+On: 2011-10-20 14:32:56.335351 Event: landline
+On: 2011-10-20 14:32:58.344224 Event: Connected to Caller Handler
+On: 2011-10-20 14:32:58.344611 Event: Caller Handler respond
+On: 2011-10-20 14:32:58.350805 Event: Caller handler : Ready
+On: 2011-10-20 14:32:58.350844 Event: init Receiver
+On: 2011-10-20 14:32:58.350866 Event: GSMRZ3
+On: 2011-10-20 14:33:05.359319 Event: Connected to Receiver Handler
+On: 2011-10-20 14:33:05.366947 Event: Receiver Handler respond
+On: 2011-10-20 14:33:05.369177 Event: Receiver handler : Ready
+On: 2011-10-20 14:33:05.369213 Event: Start Call
+On: 2011-10-20 14:33:05.369271 Event: Waiting Feedback
+On: 2011-10-20 14:33:14.021281 Event: Test Succeed
+On: 2011-10-20 14:33:18.055452 Event:
+On: 2011-10-20 14:33:18.055514 Event: init Caller
+On: 2011-10-20 14:33:18.055534 Event: GSMRZ3
+On: 2011-10-20 14:33:25.065387 Event: Connected to Caller Handler
+On: 2011-10-20 14:33:25.073221 Event: Caller Handler respond
+On: 2011-10-20 14:33:25.075698 Event: Caller handler : Ready
+On: 2011-10-20 14:33:25.075731 Event: init Receiver
+On: 2011-10-20 14:33:25.075754 Event: sip
+On: 2011-10-20 14:33:27.080936 Event: Connected to Receiver Handler
+On: 2011-10-20 14:33:27.081325 Event: Receiver Handler respond
+On: 2011-10-20 14:33:27.082306 Event: Receiver handler : Ready
+On: 2011-10-20 14:33:27.082341 Event: Start Call
+On: 2011-10-20 14:33:27.082496 Event: Waiting Feedback
+On: 2011-10-20 14:33:30.352044 Event: Test Succeed
+On: 2011-10-20 14:33:34.392821 Event:
+On: 2011-10-20 14:33:34.392879 Event: init Caller
+On: 2011-10-20 14:33:34.392900 Event: sip
+On: 2011-10-20 14:33:36.397766 Event: Connected to Caller Handler
+On: 2011-10-20 14:33:36.398170 Event: Caller Handler respond
+On: 2011-10-20 14:33:36.399302 Event: Caller handler : Ready
+On: 2011-10-20 14:33:36.399340 Event: init Receiver
+On: 2011-10-20 14:33:36.399361 Event: GSMExt.Eplus
+On: 2011-10-20 14:33:38.402636 Event: Connected to Receiver Handler
+On: 2011-10-20 14:33:38.402917 Event: Receiver Handler respond
+On: 2011-10-20 14:33:38.403095 Event: Receiver handler : Ready
+On: 2011-10-20 14:33:38.403125 Event: Start Call
+On: 2011-10-20 14:33:38.403178 Event: Waiting Feedback
+On: 2011-10-20 14:33:53.403335 Event: Test Failed
+On: 2011-10-20 14:33:57.475774 Event:
+On: 2011-10-20 14:33:57.475837 Event: init Caller
+On: 2011-10-20 14:33:57.475857 Event: sip
+On: 2011-10-20 14:33:59.486802 Event: Connected to Caller Handler
+On: 2011-10-20 14:33:59.487190 Event: Caller Handler respond
+On: 2011-10-20 14:33:59.488557 Event: Caller handler : Ready
+On: 2011-10-20 14:33:59.488594 Event: init Receiver
+On: 2011-10-20 14:33:59.488615 Event: GSMExt.O2
+On: 2011-10-20 14:34:01.493894 Event: Connected to Receiver Handler
+On: 2011-10-20 14:34:01.494176 Event: Receiver Handler respond
+On: 2011-10-20 14:34:01.494380 Event: Receiver handler : Ready
+On: 2011-10-20 14:34:01.494410 Event: Start Call
+On: 2011-10-20 14:34:01.494465 Event: Waiting Feedback
+On: 2011-10-20 14:34:16.494628 Event: Test Failed
+On: 2011-10-20 14:34:20.572712 Event:
+On: 2011-10-20 14:34:20.572774 Event: init Caller
+On: 2011-10-20 14:34:20.572794 Event: sip
+On: 2011-10-20 14:34:22.578596 Event: Connected to Caller Handler
+On: 2011-10-20 14:34:22.578987 Event: Caller Handler respond
+On: 2011-10-20 14:34:22.579749 Event: Caller handler : Ready
+On: 2011-10-20 14:34:22.579786 Event: init Receiver
+On: 2011-10-20 14:34:22.579807 Event: GSMExt.Tm
+On: 2011-10-20 14:34:24.585572 Event: Connected to Receiver Handler
+On: 2011-10-20 14:34:24.586032 Event: Receiver Handler respond
+On: 2011-10-20 14:34:24.586255 Event: Receiver handler : Ready
+On: 2011-10-20 14:34:24.586285 Event: Start Call
+On: 2011-10-20 14:34:24.586340 Event: Waiting Feedback
+On: 2011-10-20 14:34:39.586497 Event: Test Failed
+On: 2011-10-20 14:34:43.664056 Event:
+On: 2011-10-20 14:34:43.664121 Event: init Caller
+On: 2011-10-20 14:34:43.664141 Event: sip
+On: 2011-10-20 14:34:45.670363 Event: Connected to Caller Handler
+On: 2011-10-20 14:34:45.670754 Event: Caller Handler respond
+On: 2011-10-20 14:34:45.671512 Event: Caller handler : Ready
+On: 2011-10-20 14:34:45.671549 Event: init Receiver
+On: 2011-10-20 14:34:45.671569 Event: GSMExt.Voda
+On: 2011-10-20 14:34:47.676856 Event: Connected to Receiver Handler
+On: 2011-10-20 14:34:47.677138 Event: Receiver Handler respond
+On: 2011-10-20 14:34:47.677317 Event: Receiver handler : Ready
+On: 2011-10-20 14:34:47.677347 Event: Start Call
+On: 2011-10-20 14:34:47.677400 Event: Waiting Feedback
+On: 2011-10-20 14:35:02.677557 Event: Test Failed
+On: 2011-10-20 14:35:06.736823 Event:
+On: 2011-10-20 14:35:06.736884 Event: init Caller
+On: 2011-10-20 14:35:06.736904 Event: sip
+On: 2011-10-20 14:35:08.748663 Event: Connected to Caller Handler
+On: 2011-10-20 14:35:08.749059 Event: Caller Handler respond
+On: 2011-10-20 14:35:08.749842 Event: Caller handler : Ready
+On: 2011-10-20 14:35:08.749882 Event: init Receiver
+On: 2011-10-20 14:35:08.749904 Event: GSMRZ2
+On: 2011-10-20 14:35:15.760828 Event: Connected to Receiver Handler
+On: 2011-10-20 14:35:15.768965 Event: Receiver Handler respond
+On: 2011-10-20 14:35:15.771216 Event: Receiver handler : Ready
+On: 2011-10-20 14:35:15.771274 Event: Start Call
+On: 2011-10-20 14:35:15.771341 Event: Waiting Feedback
+On: 2011-10-20 14:35:21.143613 Event: Test Succeed
+On: 2011-10-20 14:35:25.186761 Event:
+On: 2011-10-20 14:35:25.186822 Event: init Caller
+On: 2011-10-20 14:35:25.186841 Event: GSMRZ2
+On: 2011-10-20 14:35:32.196643 Event: Connected to Caller Handler
+On: 2011-10-20 14:35:32.203803 Event: Caller Handler respond
+On: 2011-10-20 14:35:32.206909 Event: Caller handler : Ready
+On: 2011-10-20 14:35:32.206949 Event: init Receiver
+On: 2011-10-20 14:35:32.206971 Event: GSMRZ1
+On: 2011-10-20 14:35:34.212036 Event: Connected to Receiver Handler
+On: 2011-10-20 14:35:34.212324 Event: Receiver Handler respond
+On: 2011-10-20 14:35:34.212504 Event: Receiver handler : Ready
+On: 2011-10-20 14:35:34.212532 Event: Start Call
+On: 2011-10-20 14:35:34.213965 Event: Waiting Feedback
+On: 2011-10-20 14:35:39.707131 Event: Test Succeed
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:38:53.438628 ------------------
+On: 2011-10-20 14:38:53.438705 Event: init Caller
+On: 2011-10-20 14:38:53.438729 Event: unisip
+On: 2011-10-20 14:38:55.443685 Event: Connected to Caller Handler
+On: 2011-10-20 14:38:55.444078 Event: Caller Handler respond
+On: 2011-10-20 14:38:55.444834 Event: Caller handler : Ready
+On: 2011-10-20 14:38:55.444874 Event: init Receiver
+On: 2011-10-20 14:38:55.444895 Event: GSMRZ3
+On: 2011-10-20 14:39:02.450298 Event: Connected to Receiver Handler
+On: 2011-10-20 14:39:02.457488 Event: Receiver Handler respond
+On: 2011-10-20 14:39:02.460753 Event: Receiver handler : Ready
+On: 2011-10-20 14:39:02.460800 Event: Start Call
+On: 2011-10-20 14:39:02.460860 Event: Waiting Feedback
+On: 2011-10-20 14:39:07.849944 Event: Test Succeed
+On: 2011-10-20 14:39:11.894454 Event:
+On: 2011-10-20 14:39:11.894515 Event: init Caller
+On: 2011-10-20 14:39:11.894535 Event: GSMRZ1
+On: 2011-10-20 14:39:13.899536 Event: Connected to Caller Handler
+On: 2011-10-20 14:39:13.899813 Event: Caller Handler respond
+On: 2011-10-20 14:39:13.900000 Event: Caller handler : Ready
+On: 2011-10-20 14:39:13.900028 Event: init Receiver
+On: 2011-10-20 14:39:13.900047 Event: GSMExt.Tm
+On: 2011-10-20 14:39:15.905283 Event: Connected to Receiver Handler
+On: 2011-10-20 14:39:15.905563 Event: Receiver Handler respond
+On: 2011-10-20 14:39:15.905916 Event: Receiver handler : Ready
+On: 2011-10-20 14:39:15.905958 Event: Start Call
+On: 2011-10-20 14:39:15.909876 Event: Waiting Feedback
+On: 2011-10-20 14:39:30.910085 Event: Test Failed
+On: 2011-10-20 14:39:34.990204 Event:
+On: 2011-10-20 14:39:34.990268 Event: init Caller
+On: 2011-10-20 14:39:34.990288 Event: landline
+On: 2011-10-20 14:39:36.994957 Event: Connected to Caller Handler
+On: 2011-10-20 14:39:36.995347 Event: Caller Handler respond
+On: 2011-10-20 14:39:36.998383 Event: Caller handler : Ready
+On: 2011-10-20 14:39:36.998422 Event: init Receiver
+On: 2011-10-20 14:39:36.998442 Event: GSMRZ2
+On: 2011-10-20 14:39:44.007313 Event: Connected to Receiver Handler
+On: 2011-10-20 14:39:44.015189 Event: Receiver Handler respond
+On: 2011-10-20 14:39:44.017473 Event: Receiver handler : Ready
+On: 2011-10-20 14:39:44.017509 Event: Start Call
+On: 2011-10-20 14:39:44.017568 Event: Waiting Feedback
+On: 2011-10-20 14:39:55.549350 Event: Test Succeed
+On: 2011-10-20 14:39:59.585383 Event:
+On: 2011-10-20 14:39:59.585443 Event: init Caller
+On: 2011-10-20 14:39:59.585462 Event: GSMRZ2
+On: 2011-10-20 14:40:06.595265 Event: Connected to Caller Handler
+On: 2011-10-20 14:40:06.603083 Event: Caller Handler respond
+On: 2011-10-20 14:40:06.605317 Event: Caller handler : Ready
+On: 2011-10-20 14:40:06.605352 Event: init Receiver
+On: 2011-10-20 14:40:06.605375 Event: sip
+On: 2011-10-20 14:40:08.610249 Event: Connected to Receiver Handler
+On: 2011-10-20 14:40:08.610636 Event: Receiver Handler respond
+On: 2011-10-20 14:40:08.611378 Event: Receiver handler : Ready
+On: 2011-10-20 14:40:08.611418 Event: Start Call
+On: 2011-10-20 14:40:08.611577 Event: Waiting Feedback
+On: 2011-10-20 14:40:12.070466 Event: Test Succeed
+On: 2011-10-20 14:40:16.111445 Event:
+On: 2011-10-20 14:40:16.111502 Event: init Caller
+On: 2011-10-20 14:40:16.111522 Event: sip
+On: 2011-10-20 14:40:18.116285 Event: Connected to Caller Handler
+On: 2011-10-20 14:40:18.116673 Event: Caller Handler respond
+On: 2011-10-20 14:40:18.117440 Event: Caller handler : Ready
+On: 2011-10-20 14:40:18.117476 Event: init Receiver
+On: 2011-10-20 14:40:18.117496 Event: GSMExt.Eplus
+On: 2011-10-20 14:40:20.122793 Event: Connected to Receiver Handler
+On: 2011-10-20 14:40:20.123071 Event: Receiver Handler respond
+On: 2011-10-20 14:40:20.123250 Event: Receiver handler : Ready
+On: 2011-10-20 14:40:20.123279 Event: Start Call
+On: 2011-10-20 14:40:20.123333 Event: Waiting Feedback
+On: 2011-10-20 14:40:35.123490 Event: Test Failed
+On: 2011-10-20 14:40:39.196331 Event:
+On: 2011-10-20 14:40:39.196394 Event: init Caller
+On: 2011-10-20 14:40:39.196413 Event: sip
+On: 2011-10-20 14:40:41.206404 Event: Connected to Caller Handler
+On: 2011-10-20 14:40:41.206789 Event: Caller Handler respond
+On: 2011-10-20 14:40:41.207656 Event: Caller handler : Ready
+On: 2011-10-20 14:40:41.207689 Event: init Receiver
+On: 2011-10-20 14:40:41.207710 Event: GSMExt.O2
+On: 2011-10-20 14:40:43.213164 Event: Connected to Receiver Handler
+On: 2011-10-20 14:40:43.213440 Event: Receiver Handler respond
+On: 2011-10-20 14:40:43.213616 Event: Receiver handler : Ready
+On: 2011-10-20 14:40:43.213646 Event: Start Call
+On: 2011-10-20 14:40:43.213697 Event: Waiting Feedback
+On: 2011-10-20 14:40:58.217958 Event: Test Failed
+On: 2011-10-20 14:41:02.294913 Event:
+On: 2011-10-20 14:41:02.294977 Event: init Caller
+On: 2011-10-20 14:41:02.294996 Event: sip
+On: 2011-10-20 14:41:04.301251 Event: Connected to Caller Handler
+On: 2011-10-20 14:41:04.301636 Event: Caller Handler respond
+On: 2011-10-20 14:41:04.302574 Event: Caller handler : Ready
+On: 2011-10-20 14:41:04.302617 Event: init Receiver
+On: 2011-10-20 14:41:04.302638 Event: GSMExt.Voda
+On: 2011-10-20 14:41:06.306628 Event: Connected to Receiver Handler
+On: 2011-10-20 14:41:06.306911 Event: Receiver Handler respond
+On: 2011-10-20 14:41:06.307094 Event: Receiver handler : Ready
+On: 2011-10-20 14:41:06.307123 Event: Start Call
+On: 2011-10-20 14:41:06.307175 Event: Waiting Feedback
+On: 2011-10-20 14:41:21.307331 Event: Test Failed
+On: 2011-10-20 14:41:25.384864 Event:
+On: 2011-10-20 14:41:25.384927 Event: init Caller
+On: 2011-10-20 14:41:25.384947 Event: sip
+On: 2011-10-20 14:41:27.390772 Event: Connected to Caller Handler
+On: 2011-10-20 14:41:27.391163 Event: Caller Handler respond
+On: 2011-10-20 14:41:27.391901 Event: Caller handler : Ready
+On: 2011-10-20 14:41:27.391939 Event: init Receiver
+On: 2011-10-20 14:41:27.391960 Event: GSMExt.Tm
+On: 2011-10-20 14:41:29.397262 Event: Connected to Receiver Handler
+On: 2011-10-20 14:41:29.397540 Event: Receiver Handler respond
+On: 2011-10-20 14:41:29.397760 Event: Receiver handler : Ready
+On: 2011-10-20 14:41:29.397791 Event: Start Call
+On: 2011-10-20 14:41:29.397844 Event: Waiting Feedback
+On: 2011-10-20 14:41:44.397999 Event: Test Failed
+On: 2011-10-20 14:41:48.472762 Event:
+On: 2011-10-20 14:41:48.472821 Event: init Caller
+On: 2011-10-20 14:41:48.472840 Event: sip
+On: 2011-10-20 14:41:50.482557 Event: Connected to Caller Handler
+On: 2011-10-20 14:41:50.482945 Event: Caller Handler respond
+On: 2011-10-20 14:41:50.483703 Event: Caller handler : Ready
+On: 2011-10-20 14:41:50.483740 Event: init Receiver
+On: 2011-10-20 14:41:50.483761 Event: GSMRZ1
+On: 2011-10-20 14:41:52.487079 Event: Connected to Receiver Handler
+On: 2011-10-20 14:41:52.487362 Event: Receiver Handler respond
+On: 2011-10-20 14:41:52.487569 Event: Receiver handler : Ready
+On: 2011-10-20 14:41:52.487600 Event: Start Call
+On: 2011-10-20 14:41:52.487655 Event: Waiting Feedback
+On: 2011-10-20 14:41:58.481872 Event: Test Succeed
+On: 2011-10-20 14:42:02.522238 Event:
+On: 2011-10-20 14:42:02.522301 Event: init Caller
+On: 2011-10-20 14:42:02.522321 Event: GSMRZ1
+On: 2011-10-20 14:42:04.526640 Event: Connected to Caller Handler
+On: 2011-10-20 14:42:04.526915 Event: Caller Handler respond
+On: 2011-10-20 14:42:04.527098 Event: Caller handler : Ready
+On: 2011-10-20 14:42:04.527126 Event: init Receiver
+On: 2011-10-20 14:42:04.527145 Event: GSMRZ2
+On: 2011-10-20 14:42:11.537992 Event: Connected to Receiver Handler
+On: 2011-10-20 14:42:11.546113 Event: Receiver Handler respond
+On: 2011-10-20 14:42:11.548259 Event: Receiver handler : Ready
+On: 2011-10-20 14:42:11.548295 Event: Start Call
+On: 2011-10-20 14:42:11.551493 Event: Waiting Feedback
+On: 2011-10-20 14:42:16.229867 Event: Test Succeed
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:55:30.017862 ------------------
+On: 2011-10-20 14:55:30.017940 Event: init Caller
+On: 2011-10-20 14:55:30.017964 Event: unisip
+On: 2011-10-20 14:55:32.022775 Event: Connected to Caller Handler
+On: 2011-10-20 14:55:32.023070 Event: Caller Handler respond
+On: 2011-10-20 14:55:32.024189 Event: Caller handler : Ready
+On: 2011-10-20 14:55:32.024228 Event: init Receiver
+On: 2011-10-20 14:55:32.024249 Event: GSMRZ3
+On: 2011-10-20 14:55:39.034411 Event: Connected to Receiver Handler
+On: 2011-10-20 14:55:39.041775 Event: Receiver Handler respond
+On: 2011-10-20 14:55:39.044428 Event: Receiver handler : Ready
+On: 2011-10-20 14:55:39.044466 Event: Start Call
+On: 2011-10-20 14:55:39.044524 Event: Waiting Feedback
+On: 2011-10-20 14:55:44.266007 Event: Test Succeed
+On: 2011-10-20 14:55:48.310433 Event:
+On: 2011-10-20 14:55:48.310495 Event: init Caller
+On: 2011-10-20 14:55:48.310515 Event: GSMRZ1
+On: 2011-10-20 14:55:50.315532 Event: Connected to Caller Handler
+On: 2011-10-20 14:55:50.315798 Event: Caller Handler respond
+On: 2011-10-20 14:55:50.315975 Event: Caller handler : Ready
+On: 2011-10-20 14:55:50.315998 Event: init Receiver
+On: 2011-10-20 14:55:50.316016 Event: GSMExt.Eplus
+On: 2011-10-20 14:55:52.321409 Event: Connected to Receiver Handler
+On: 2011-10-20 14:55:52.321687 Event: Receiver Handler respond
+On: 2011-10-20 14:55:52.322067 Event: Receiver handler : Ready
+On: 2011-10-20 14:55:52.322105 Event: Start Call
+On: 2011-10-20 14:55:52.325868 Event: Waiting Feedback
+On: 2011-10-20 14:56:07.326074 Event: Test Failed
+On: 2011-10-20 14:56:11.410155 Event:
+On: 2011-10-20 14:56:11.410216 Event: init Caller
+On: 2011-10-20 14:56:11.410236 Event: landline
+On: 2011-10-20 14:56:13.416221 Event: Connected to Caller Handler
+On: 2011-10-20 14:56:13.416598 Event: Caller Handler respond
+On: 2011-10-20 14:56:13.418942 Event: Caller handler : Ready
+On: 2011-10-20 14:56:13.418978 Event: init Receiver
+On: 2011-10-20 14:56:13.418999 Event: GSMRZ2
+On: 2011-10-20 14:56:20.422381 Event: Connected to Receiver Handler
+On: 2011-10-20 14:56:20.429749 Event: Receiver Handler respond
+On: 2011-10-20 14:56:20.432534 Event: Receiver handler : Ready
+On: 2011-10-20 14:56:20.432581 Event: Start Call
+On: 2011-10-20 14:56:20.432644 Event: Waiting Feedback
+On: 2011-10-20 14:56:34.135596 Event: Test Succeed
+On: 2011-10-20 14:56:38.172585 Event:
+On: 2011-10-20 14:56:38.172643 Event: init Caller
+On: 2011-10-20 14:56:38.172662 Event: GSMRZ2
+On: 2011-10-20 14:56:45.182498 Event: Connected to Caller Handler
+On: 2011-10-20 14:56:45.189548 Event: Caller Handler respond
+On: 2011-10-20 14:56:45.192605 Event: Caller handler : Ready
+On: 2011-10-20 14:56:45.192647 Event: init Receiver
+On: 2011-10-20 14:56:45.192669 Event: sip
+On: 2011-10-20 14:56:47.197890 Event: Connected to Receiver Handler
+On: 2011-10-20 14:56:47.198194 Event: Receiver Handler respond
+On: 2011-10-20 14:56:47.198951 Event: Receiver handler : Ready
+On: 2011-10-20 14:56:47.198990 Event: Start Call
+On: 2011-10-20 14:56:47.199240 Event: Waiting Feedback
+On: 2011-10-20 14:56:51.114459 Event: Test Succeed
+On: 2011-10-20 14:56:55.160046 Event:
+On: 2011-10-20 14:56:55.160105 Event: init Caller
+On: 2011-10-20 14:56:55.160125 Event: sip
+On: 2011-10-20 14:56:57.165072 Event: Connected to Caller Handler
+On: 2011-10-20 14:56:57.165355 Event: Caller Handler respond
+On: 2011-10-20 14:56:57.166170 Event: Caller handler : Ready
+On: 2011-10-20 14:56:57.166206 Event: init Receiver
+On: 2011-10-20 14:56:57.166227 Event: GSMExt.O2
+On: 2011-10-20 14:56:59.170625 Event: Connected to Receiver Handler
+On: 2011-10-20 14:56:59.170907 Event: Receiver Handler respond
+On: 2011-10-20 14:56:59.171088 Event: Receiver handler : Ready
+On: 2011-10-20 14:56:59.171117 Event: Start Call
+On: 2011-10-20 14:56:59.171169 Event: Waiting Feedback
+On: 2011-10-20 14:57:14.171325 Event: Test Failed
+On: 2011-10-20 14:57:18.274317 Event:
+On: 2011-10-20 14:57:18.274373 Event: init Caller
+On: 2011-10-20 14:57:18.274393 Event: sip
+On: 2011-10-20 14:57:20.288750 Event: Connected to Caller Handler
+On: 2011-10-20 14:57:20.289038 Event: Caller Handler respond
+On: 2011-10-20 14:57:20.290293 Event: Caller handler : Ready
+On: 2011-10-20 14:57:20.290334 Event: init Receiver
+On: 2011-10-20 14:57:20.290355 Event: GSMExt.Tm
+On: 2011-10-20 14:57:22.294640 Event: Connected to Receiver Handler
+On: 2011-10-20 14:57:22.294926 Event: Receiver Handler respond
+On: 2011-10-20 14:57:22.295108 Event: Receiver handler : Ready
+On: 2011-10-20 14:57:22.295139 Event: Start Call
+On: 2011-10-20 14:57:22.295193 Event: Waiting Feedback
+On: 2011-10-20 14:57:37.295347 Event: Test Failed
+On: 2011-10-20 14:57:41.370144 Event:
+On: 2011-10-20 14:57:41.370206 Event: init Caller
+On: 2011-10-20 14:57:41.370225 Event: sip
+On: 2011-10-20 14:57:43.378726 Event: Connected to Caller Handler
+On: 2011-10-20 14:57:43.379120 Event: Caller Handler respond
+On: 2011-10-20 14:57:43.379889 Event: Caller handler : Ready
+On: 2011-10-20 14:57:43.379926 Event: init Receiver
+On: 2011-10-20 14:57:43.379946 Event: GSMExt.Voda
+On: 2011-10-20 14:57:45.385764 Event: Connected to Receiver Handler
+On: 2011-10-20 14:57:45.386054 Event: Receiver Handler respond
+On: 2011-10-20 14:57:45.386230 Event: Receiver handler : Ready
+On: 2011-10-20 14:57:45.386256 Event: Start Call
+On: 2011-10-20 14:57:45.386309 Event: Waiting Feedback
+On: 2011-10-20 14:58:00.386467 Event: Test Failed
+On: 2011-10-20 14:58:04.462071 Event:
+On: 2011-10-20 14:58:04.462133 Event: init Caller
+On: 2011-10-20 14:58:04.462152 Event: sip
+On: 2011-10-20 14:58:06.468996 Event: Connected to Caller Handler
+On: 2011-10-20 14:58:06.469387 Event: Caller Handler respond
+On: 2011-10-20 14:58:06.470692 Event: Caller handler : Ready
+On: 2011-10-20 14:58:06.470731 Event: init Receiver
+On: 2011-10-20 14:58:06.470752 Event: GSMExt.Eplus
+On: 2011-10-20 14:58:08.474632 Event: Connected to Receiver Handler
+On: 2011-10-20 14:58:08.474919 Event: Receiver Handler respond
+On: 2011-10-20 14:58:08.475106 Event: Receiver handler : Ready
+On: 2011-10-20 14:58:08.475137 Event: Start Call
+On: 2011-10-20 14:58:08.475191 Event: Waiting Feedback
+On: 2011-10-20 14:58:23.475356 Event: Test Failed
+On: 2011-10-20 14:58:27.551968 Event:
+On: 2011-10-20 14:58:27.552029 Event: init Caller
+On: 2011-10-20 14:58:27.552049 Event: sip
+On: 2011-10-20 14:58:29.558363 Event: Connected to Caller Handler
+On: 2011-10-20 14:58:29.558660 Event: Caller Handler respond
+On: 2011-10-20 14:58:29.559424 Event: Caller handler : Ready
+On: 2011-10-20 14:58:29.559461 Event: init Receiver
+On: 2011-10-20 14:58:29.559482 Event: GSMRZ1
+On: 2011-10-20 14:58:31.565484 Event: Connected to Receiver Handler
+On: 2011-10-20 14:58:31.565815 Event: Receiver Handler respond
+On: 2011-10-20 14:58:31.566010 Event: Receiver handler : Ready
+On: 2011-10-20 14:58:31.566040 Event: Start Call
+On: 2011-10-20 14:58:31.566096 Event: Waiting Feedback
+On: 2011-10-20 14:58:36.541935 Event: Test Succeed
+On: 2011-10-20 14:58:40.582308 Event:
+On: 2011-10-20 14:58:40.582368 Event: init Caller
+On: 2011-10-20 14:58:40.582388 Event: GSMRZ2
+On: 2011-10-20 14:58:47.592223 Event: Connected to Caller Handler
+On: 2011-10-20 14:58:47.598919 Event: Caller Handler respond
+On: 2011-10-20 14:58:47.601069 Event: Caller handler : Ready
+On: 2011-10-20 14:58:47.601103 Event: init Receiver
+On: 2011-10-20 14:58:47.601124 Event: GSMRZ1
+On: 2011-10-20 14:58:49.606415 Event: Connected to Receiver Handler
+On: 2011-10-20 14:58:49.606699 Event: Receiver Handler respond
+On: 2011-10-20 14:58:49.606882 Event: Receiver handler : Ready
+On: 2011-10-20 14:58:49.606911 Event: Start Call
+On: 2011-10-20 14:58:49.609963 Event: Waiting Feedback
+On: 2011-10-20 14:58:55.010644 Event: Test Succeed
+
+
+------------------STARTED THE LOGGING 2011-10-20 15:00:09.573230 ------------------
+On: 2011-10-20 15:00:09.573304 Event: init Caller
+On: 2011-10-20 15:00:09.573328 Event: unisip
+On: 2011-10-20 15:00:11.578546 Event: Connected to Caller Handler
+On: 2011-10-20 15:00:11.578855 Event: Caller Handler respond
+On: 2011-10-20 15:00:11.579626 Event: Caller handler : Ready
+On: 2011-10-20 15:00:11.579664 Event: init Receiver
+On: 2011-10-20 15:00:11.579686 Event: GSMRZ1
+On: 2011-10-20 15:00:13.585240 Event: Connected to Receiver Handler
+On: 2011-10-20 15:00:13.585521 Event: Receiver Handler respond
+On: 2011-10-20 15:00:13.585904 Event: Receiver handler : Ready
+On: 2011-10-20 15:00:13.585951 Event: Start Call
+On: 2011-10-20 15:00:13.586027 Event: Waiting Feedback
+On: 2011-10-20 15:00:18.993874 Event: Test Succeed
+On: 2011-10-20 15:00:23.033767 Event:
+On: 2011-10-20 15:00:23.033828 Event: init Caller
+On: 2011-10-20 15:00:23.033849 Event: GSMRZ2
+On: 2011-10-20 15:00:30.043613 Event: Connected to Caller Handler
+On: 2011-10-20 15:00:30.050734 Event: Caller Handler respond
+On: 2011-10-20 15:00:30.053830 Event: Caller handler : Ready
+On: 2011-10-20 15:00:30.053875 Event: init Receiver
+On: 2011-10-20 15:00:30.053898 Event: GSMExt.Voda
+On: 2011-10-20 15:00:32.059058 Event: Connected to Receiver Handler
+On: 2011-10-20 15:00:32.059344 Event: Receiver Handler respond
+On: 2011-10-20 15:00:32.059525 Event: Receiver handler : Ready
+On: 2011-10-20 15:00:32.059556 Event: Start Call
+On: 2011-10-20 15:00:32.061853 Event: Waiting Feedback
+On: 2011-10-20 15:00:47.062060 Event: Test Failed
+On: 2011-10-20 15:00:51.146175 Event:
+On: 2011-10-20 15:00:51.146237 Event: init Caller
+On: 2011-10-20 15:00:51.146257 Event: landline
+On: 2011-10-20 15:00:53.149351 Event: Connected to Caller Handler
+On: 2011-10-20 15:00:53.149964 Event: Caller Handler respond
+On: 2011-10-20 15:00:53.152509 Event: Caller handler : Ready
+On: 2011-10-20 15:00:53.152547 Event: init Receiver
+On: 2011-10-20 15:00:53.152569 Event: GSMRZ3
+On: 2011-10-20 15:01:00.160224 Event: Connected to Receiver Handler
+On: 2011-10-20 15:01:00.167112 Event: Receiver Handler respond
+On: 2011-10-20 15:01:00.170338 Event: Receiver handler : Ready
+On: 2011-10-20 15:01:00.170398 Event: Start Call
+On: 2011-10-20 15:01:00.170469 Event: Waiting Feedback
+On: 2011-10-20 15:01:10.547444 Event: Test Succeed
+On: 2011-10-20 15:01:14.587913 Event:
+On: 2011-10-20 15:01:14.587971 Event: init Caller
+On: 2011-10-20 15:01:14.587992 Event: sip
+On: 2011-10-20 15:01:16.592799 Event: Connected to Caller Handler
+On: 2011-10-20 15:01:16.593184 Event: Caller Handler respond
+On: 2011-10-20 15:01:16.594466 Event: Caller handler : Ready
+On: 2011-10-20 15:01:16.594502 Event: init Receiver
+On: 2011-10-20 15:01:16.594525 Event: GSMExt.Eplus
+On: 2011-10-20 15:01:18.598635 Event: Connected to Receiver Handler
+On: 2011-10-20 15:01:18.598917 Event: Receiver Handler respond
+On: 2011-10-20 15:01:18.599099 Event: Receiver handler : Ready
+On: 2011-10-20 15:01:18.599129 Event: Start Call
+On: 2011-10-20 15:01:18.599183 Event: Waiting Feedback
+On: 2011-10-20 15:01:33.599340 Event: Test Failed
+On: 2011-10-20 15:01:37.672074 Event:
+On: 2011-10-20 15:01:37.672136 Event: init Caller
+On: 2011-10-20 15:01:37.672157 Event: sip
+On: 2011-10-20 15:01:39.681949 Event: Connected to Caller Handler
+On: 2011-10-20 15:01:39.682339 Event: Caller Handler respond
+On: 2011-10-20 15:01:39.683113 Event: Caller handler : Ready
+On: 2011-10-20 15:01:39.683150 Event: init Receiver
+On: 2011-10-20 15:01:39.683171 Event: GSMExt.O2
+On: 2011-10-20 15:01:41.686636 Event: Connected to Receiver Handler
+On: 2011-10-20 15:01:41.686918 Event: Receiver Handler respond
+On: 2011-10-20 15:01:41.687099 Event: Receiver handler : Ready
+On: 2011-10-20 15:01:41.687128 Event: Start Call
+On: 2011-10-20 15:01:41.687183 Event: Waiting Feedback
+On: 2011-10-20 15:01:56.687342 Event: Test Failed
+On: 2011-10-20 15:02:00.763895 Event:
+On: 2011-10-20 15:02:00.763957 Event: init Caller
+On: 2011-10-20 15:02:00.763977 Event: sip
+On: 2011-10-20 15:02:02.770270 Event: Connected to Caller Handler
+On: 2011-10-20 15:02:02.770567 Event: Caller Handler respond
+On: 2011-10-20 15:02:02.771615 Event: Caller handler : Ready
+On: 2011-10-20 15:02:02.771651 Event: init Receiver
+On: 2011-10-20 15:02:02.771673 Event: GSMExt.Tm
+On: 2011-10-20 15:02:04.777461 Event: Connected to Receiver Handler
+On: 2011-10-20 15:02:04.777933 Event: Receiver Handler respond
+On: 2011-10-20 15:02:04.778174 Event: Receiver handler : Ready
+On: 2011-10-20 15:02:04.778207 Event: Start Call
+On: 2011-10-20 15:02:04.778262 Event: Waiting Feedback
+On: 2011-10-20 15:02:19.778416 Event: Test Failed
+On: 2011-10-20 15:02:23.855619 Event:
+On: 2011-10-20 15:02:23.855682 Event: init Caller
+On: 2011-10-20 15:02:23.855701 Event: sip
+On: 2011-10-20 15:02:25.861897 Event: Connected to Caller Handler
+On: 2011-10-20 15:02:25.862293 Event: Caller Handler respond
+On: 2011-10-20 15:02:25.863061 Event: Caller handler : Ready
+On: 2011-10-20 15:02:25.863098 Event: init Receiver
+On: 2011-10-20 15:02:25.863120 Event: GSMExt.Voda
+On: 2011-10-20 15:02:27.866625 Event: Connected to Receiver Handler
+On: 2011-10-20 15:02:27.866910 Event: Receiver Handler respond
+On: 2011-10-20 15:02:27.867095 Event: Receiver handler : Ready
+On: 2011-10-20 15:02:27.867126 Event: Start Call
+On: 2011-10-20 15:02:27.867180 Event: Waiting Feedback
+On: 2011-10-20 15:02:42.867340 Event: Test Failed
+On: 2011-10-20 15:02:46.924864 Event:
+On: 2011-10-20 15:02:46.924924 Event: init Caller
+On: 2011-10-20 15:02:46.924944 Event: sip
+On: 2011-10-20 15:02:48.940618 Event: Connected to Caller Handler
+On: 2011-10-20 15:02:48.941008 Event: Caller Handler respond
+On: 2011-10-20 15:02:48.941812 Event: Caller handler : Ready
+On: 2011-10-20 15:02:48.941849 Event: init Receiver
+On: 2011-10-20 15:02:48.941871 Event: GSMRZ2
+On: 2011-10-20 15:02:55.946265 Event: Connected to Receiver Handler
+On: 2011-10-20 15:02:55.953627 Event: Receiver Handler respond
+On: 2011-10-20 15:02:55.955753 Event: Receiver handler : Ready
+On: 2011-10-20 15:02:55.955790 Event: Start Call
+On: 2011-10-20 15:02:55.955851 Event: Waiting Feedback
+On: 2011-10-20 15:03:01.107077 Event: Test Succeed
+On: 2011-10-20 15:03:05.143655 Event:
+On: 2011-10-20 15:03:05.143715 Event: init Caller
+On: 2011-10-20 15:03:05.143735 Event: GSMRZ2
+On: 2011-10-20 15:03:12.153589 Event: Connected to Caller Handler
+On: 2011-10-20 15:03:12.161463 Event: Caller Handler respond
+On: 2011-10-20 15:03:12.163825 Event: Caller handler : Ready
+On: 2011-10-20 15:03:12.163881 Event: init Receiver
+On: 2011-10-20 15:03:12.163903 Event: GSMRZ3
+On: 2011-10-20 15:03:19.173838 Event: Connected to Receiver Handler
+On: 2011-10-20 15:03:19.181590 Event: Receiver Handler respond
+On: 2011-10-20 15:03:19.184277 Event: Receiver handler : Ready
+On: 2011-10-20 15:03:19.184322 Event: Start Call
+On: 2011-10-20 15:03:19.184385 Event: Waiting Feedback
+On: 2011-10-20 15:03:23.576557 Event: Test Succeed
+
+
+------------------STARTED THE LOGGING 2011-10-20 15:16:17.717995 ------------------
+On: 2011-10-20 15:16:17.718074 Event: init Caller
+On: 2011-10-20 15:16:17.718099 Event: unisip
+On: 2011-10-20 15:16:19.722806 Event: Connected to Caller Handler
+On: 2011-10-20 15:16:19.723116 Event: Caller Handler respond
+On: 2011-10-20 15:16:19.724239 Event: Caller handler : Ready
+On: 2011-10-20 15:16:19.724278 Event: init Receiver
+On: 2011-10-20 15:16:19.724299 Event: GSMRZ1
+On: 2011-10-20 15:16:21.730738 Event: Cannt connect to Receiver
+On: 2011-10-20 15:16:21.730809 Event: 998 General Handler Error: Could not connect Destination handler
+On: 2011-10-20 15:16:25.810035 Event:
+On: 2011-10-20 15:16:25.810105 Event: init Caller
+On: 2011-10-20 15:16:25.810125 Event: GSMRZ2
+On: 2011-10-20 15:16:32.818708 Event: Connected to Caller Handler
+On: 2011-10-20 15:16:32.826260 Event: Caller Handler respond
+On: 2011-10-20 15:16:32.828748 Event: Caller handler : Ready
+On: 2011-10-20 15:16:32.828815 Event: init Receiver
+On: 2011-10-20 15:16:32.828838 Event: GSMExt.Voda
+On: 2011-10-20 15:16:34.834378 Event: Connected to Receiver Handler
+On: 2011-10-20 15:16:34.834702 Event: Receiver Handler respond
+On: 2011-10-20 15:16:34.834888 Event: Receiver handler : Ready
+On: 2011-10-20 15:16:34.834918 Event: Start Call
+On: 2011-10-20 15:16:34.837920 Event: Waiting Feedback
+On: 2011-10-20 15:16:49.838139 Event: Test Failed
+On: 2011-10-20 15:16:53.922136 Event:
+On: 2011-10-20 15:16:53.922197 Event: init Caller
+On: 2011-10-20 15:16:53.922216 Event: landline
+On: 2011-10-20 15:16:55.932618 Event: Connected to Caller Handler
+On: 2011-10-20 15:16:55.933012 Event: Caller Handler respond
+On: 2011-10-20 15:16:55.941382 Event: Caller handler : Ready
+On: 2011-10-20 15:16:55.941419 Event: init Receiver
+On: 2011-10-20 15:16:55.941440 Event: GSMRZ3
+On: 2011-10-20 15:17:02.948557 Event: Connected to Receiver Handler
+On: 2011-10-20 15:17:02.955998 Event: Receiver Handler respond
+On: 2011-10-20 15:17:02.959417 Event: Receiver handler : Ready
+On: 2011-10-20 15:17:02.959466 Event: Start Call
+On: 2011-10-20 15:17:02.959530 Event: Waiting Feedback
+On: 2011-10-20 15:17:12.586901 Event: Test Succeed
+On: 2011-10-20 15:17:16.632529 Event:
+On: 2011-10-20 15:17:16.632586 Event: init Caller
+On: 2011-10-20 15:17:16.632607 Event: sip
+On: 2011-10-20 15:17:18.637556 Event: Connected to Caller Handler
+On: 2011-10-20 15:17:18.637982 Event: Caller Handler respond
+On: 2011-10-20 15:17:18.638745 Event: Caller handler : Ready
+On: 2011-10-20 15:17:18.638783 Event: init Receiver
+On: 2011-10-20 15:17:18.638804 Event: GSMExt.Eplus
+On: 2011-10-20 15:17:20.642629 Event: Connected to Receiver Handler
+On: 2011-10-20 15:17:20.642896 Event: Receiver Handler respond
+On: 2011-10-20 15:17:20.643066 Event: Receiver handler : Ready
+On: 2011-10-20 15:17:20.643092 Event: Start Call
+On: 2011-10-20 15:17:20.643143 Event: Waiting Feedback
+On: 2011-10-20 15:17:35.643305 Event: Test Failed
+On: 2011-10-20 15:17:39.720810 Event:
+On: 2011-10-20 15:17:39.720873 Event: init Caller
+On: 2011-10-20 15:17:39.720893 Event: sip
+On: 2011-10-20 15:17:41.726534 Event: Connected to Caller Handler
+On: 2011-10-20 15:17:41.726830 Event: Caller Handler respond
+On: 2011-10-20 15:17:41.727589 Event: Caller handler : Ready
+On: 2011-10-20 15:17:41.727627 Event: init Receiver
+On: 2011-10-20 15:17:41.727648 Event: GSMExt.O2
+On: 2011-10-20 15:17:43.733031 Event: Connected to Receiver Handler
+On: 2011-10-20 15:17:43.733316 Event: Receiver Handler respond
+On: 2011-10-20 15:17:43.733496 Event: Receiver handler : Ready
+On: 2011-10-20 15:17:43.733526 Event: Start Call
+On: 2011-10-20 15:17:43.733578 Event: Waiting Feedback
+On: 2011-10-20 15:17:58.733750 Event: Test Failed
+On: 2011-10-20 15:18:02.812625 Event:
+On: 2011-10-20 15:18:02.812689 Event: init Caller
+On: 2011-10-20 15:18:02.812710 Event: sip
+On: 2011-10-20 15:18:04.818978 Event: Connected to Caller Handler
+On: 2011-10-20 15:18:04.819302 Event: Caller Handler respond
+On: 2011-10-20 15:18:04.820179 Event: Caller handler : Ready
+On: 2011-10-20 15:18:04.820217 Event: init Receiver
+On: 2011-10-20 15:18:04.820238 Event: GSMExt.Tm
+On: 2011-10-20 15:18:06.827795 Event: Connected to Receiver Handler
+On: 2011-10-20 15:18:06.828082 Event: Receiver Handler respond
+On: 2011-10-20 15:18:06.828266 Event: Receiver handler : Ready
+On: 2011-10-20 15:18:06.828297 Event: Start Call
+On: 2011-10-20 15:18:06.828349 Event: Waiting Feedback
+On: 2011-10-20 15:18:21.828509 Event: Test Failed
+On: 2011-10-20 15:18:25.938250 Event:
+On: 2011-10-20 15:18:25.938312 Event: init Caller
+On: 2011-10-20 15:18:25.938332 Event: sip
+On: 2011-10-20 15:18:27.941425 Event: Connected to Caller Handler
+On: 2011-10-20 15:18:27.941770 Event: Caller Handler respond
+On: 2011-10-20 15:18:27.942562 Event: Caller handler : Ready
+On: 2011-10-20 15:18:27.942600 Event: init Receiver
+On: 2011-10-20 15:18:27.942622 Event: GSMExt.Voda
+On: 2011-10-20 15:18:29.947264 Event: Connected to Receiver Handler
+On: 2011-10-20 15:18:29.947553 Event: Receiver Handler respond
+On: 2011-10-20 15:18:29.947738 Event: Receiver handler : Ready
+On: 2011-10-20 15:18:29.947769 Event: Start Call
+On: 2011-10-20 15:18:29.948961 Event: Waiting Feedback
+On: 2011-10-20 15:18:44.949215 Event: Test Failed
+On: 2011-10-20 15:18:49.017319 Event:
+On: 2011-10-20 15:18:49.017380 Event: init Caller
+On: 2011-10-20 15:18:49.017400 Event: sip
+On: 2011-10-20 15:18:51.021050 Event: Connected to Caller Handler
+On: 2011-10-20 15:18:51.021342 Event: Caller Handler respond
+On: 2011-10-20 15:18:51.022171 Event: Caller handler : Ready
+On: 2011-10-20 15:18:51.022210 Event: init Receiver
+On: 2011-10-20 15:18:51.022231 Event: GSMRZ2
+On: 2011-10-20 15:18:58.030274 Event: Connected to Receiver Handler
+On: 2011-10-20 15:18:58.037496 Event: Receiver Handler respond
+On: 2011-10-20 15:18:58.040595 Event: Receiver handler : Ready
+On: 2011-10-20 15:18:58.040663 Event: Start Call
+On: 2011-10-20 15:18:58.040735 Event: Waiting Feedback
+On: 2011-10-20 15:19:04.320891 Event: Test Succeed
+On: 2011-10-20 15:19:08.370882 Event:
+On: 2011-10-20 15:19:08.370944 Event: init Caller
+On: 2011-10-20 15:19:08.370964 Event: GSMRZ2
+On: 2011-10-20 15:19:15.380913 Event: Connected to Caller Handler
+On: 2011-10-20 15:19:15.388152 Event: Caller Handler respond
+On: 2011-10-20 15:19:15.390581 Event: Caller handler : Ready
+On: 2011-10-20 15:19:15.390646 Event: init Receiver
+On: 2011-10-20 15:19:15.390668 Event: GSMRZ1
+On: 2011-10-20 15:19:17.394401 Event: Cannt connect to Receiver
+On: 2011-10-20 15:19:17.394463 Event: 998 General Handler Error: Could not connect Destination handler
+
+
+------------------STARTED THE LOGGING 2011-10-20 15:23:20.127905 ------------------
+On: 2011-10-20 15:23:20.127980 Event: init Caller
+On: 2011-10-20 15:23:20.128003 Event: unisip
+On: 2011-10-20 15:23:22.133155 Event: Connected to Caller Handler
+On: 2011-10-20 15:23:22.133463 Event: Caller Handler respond
+On: 2011-10-20 15:23:22.134268 Event: Caller handler : Ready
+On: 2011-10-20 15:23:22.134308 Event: init Receiver
+On: 2011-10-20 15:23:22.134329 Event: GSMRZ3
+On: 2011-10-20 15:23:29.143421 Event: Connected to Receiver Handler
+On: 2011-10-20 15:23:29.150218 Event: Receiver Handler respond
+On: 2011-10-20 15:23:29.152576 Event: Receiver handler : Ready
+On: 2011-10-20 15:23:29.152649 Event: Start Call
+On: 2011-10-20 15:23:29.152800 Event: Waiting Feedback
+On: 2011-10-20 15:23:34.350232 Event: Test Succeed
+On: 2011-10-20 15:23:38.391677 Event:
+On: 2011-10-20 15:23:38.391739 Event: init Caller
+On: 2011-10-20 15:23:38.391759 Event: GSMRZ1
+On: 2011-10-20 15:23:40.396630 Event: Cannt connect to Caller
+On: 2011-10-20 15:23:40.396694 Event: 999 General Handler Error: Could not connect to Caller handler
+On: 2011-10-20 15:23:44.476034 Event:
+On: 2011-10-20 15:23:44.476095 Event: init Caller
+On: 2011-10-20 15:23:44.476115 Event: landline
+On: 2011-10-20 15:23:46.481679 Event: Connected to Caller Handler
+On: 2011-10-20 15:23:46.482012 Event: Caller Handler respond
+On: 2011-10-20 15:23:46.484880 Event: Caller handler : Ready
+On: 2011-10-20 15:23:46.484917 Event: init Receiver
+On: 2011-10-20 15:23:46.484938 Event: GSMRZ2
+On: 2011-10-20 15:23:53.488634 Event: Connected to Receiver Handler
+On: 2011-10-20 15:23:53.496348 Event: Receiver Handler respond
+On: 2011-10-20 15:23:53.499075 Event: Receiver handler : Ready
+On: 2011-10-20 15:23:53.499137 Event: Start Call
+On: 2011-10-20 15:23:53.499284 Event: Waiting Feedback
+On: 2011-10-20 15:24:02.066930 Event: Test Succeed
+On: 2011-10-20 15:24:06.122244 Event:
+On: 2011-10-20 15:24:06.122307 Event: init Caller
+On: 2011-10-20 15:24:06.122326 Event: sip
+On: 2011-10-20 15:24:08.130568 Event: Connected to Caller Handler
+On: 2011-10-20 15:24:08.130860 Event: Caller Handler respond
+On: 2011-10-20 15:24:08.131663 Event: Caller handler : Ready
+On: 2011-10-20 15:24:08.131699 Event: init Receiver
+On: 2011-10-20 15:24:08.131720 Event: GSMExt.Eplus
+On: 2011-10-20 15:24:10.137046 Event: Connected to Receiver Handler
+On: 2011-10-20 15:24:10.137334 Event: Receiver Handler respond
+On: 2011-10-20 15:24:10.137515 Event: Receiver handler : Ready
+On: 2011-10-20 15:24:10.137546 Event: Start Call
+On: 2011-10-20 15:24:10.141748 Event: Waiting Feedback
+On: 2011-10-20 15:24:25.141967 Event: Test Failed
+On: 2011-10-20 15:24:29.255720 Event:
+On: 2011-10-20 15:24:29.255775 Event: init Caller
+On: 2011-10-20 15:24:29.255795 Event: sip
+On: 2011-10-20 15:24:31.266015 Event: Connected to Caller Handler
+On: 2011-10-20 15:24:31.266313 Event: Caller Handler respond
+On: 2011-10-20 15:24:31.267081 Event: Caller handler : Ready
+On: 2011-10-20 15:24:31.267118 Event: init Receiver
+On: 2011-10-20 15:24:31.267139 Event: GSMExt.O2
+On: 2011-10-20 15:24:33.272864 Event: Connected to Receiver Handler
+On: 2011-10-20 15:24:33.273148 Event: Receiver Handler respond
+On: 2011-10-20 15:24:33.273377 Event: Receiver handler : Ready
+On: 2011-10-20 15:24:33.273409 Event: Start Call
+On: 2011-10-20 15:24:33.273463 Event: Waiting Feedback
+On: 2011-10-20 15:24:48.273637 Event: Test Failed
+On: 2011-10-20 15:24:52.350353 Event:
+On: 2011-10-20 15:24:52.350417 Event: init Caller
+On: 2011-10-20 15:24:52.350437 Event: sip
+On: 2011-10-20 15:24:54.356704 Event: Connected to Caller Handler
+On: 2011-10-20 15:24:54.357007 Event: Caller Handler respond
+On: 2011-10-20 15:24:54.357829 Event: Caller handler : Ready
+On: 2011-10-20 15:24:54.357866 Event: init Receiver
+On: 2011-10-20 15:24:54.357887 Event: GSMExt.Tm
+On: 2011-10-20 15:24:56.362643 Event: Connected to Receiver Handler
+On: 2011-10-20 15:24:56.362930 Event: Receiver Handler respond
+On: 2011-10-20 15:24:56.363107 Event: Receiver handler : Ready
+On: 2011-10-20 15:24:56.363139 Event: Start Call
+On: 2011-10-20 15:24:56.363191 Event: Waiting Feedback
+On: 2011-10-20 15:25:11.363437 Event: Test Failed
+On: 2011-10-20 15:25:15.456168 Event:
+On: 2011-10-20 15:25:15.456231 Event: init Caller
+On: 2011-10-20 15:25:15.456251 Event: sip
+On: 2011-10-20 15:25:17.468276 Event: Connected to Caller Handler
+On: 2011-10-20 15:25:17.468573 Event: Caller Handler respond
+On: 2011-10-20 15:25:17.469750 Event: Caller handler : Ready
+On: 2011-10-20 15:25:17.469789 Event: init Receiver
+On: 2011-10-20 15:25:17.469809 Event: GSMExt.Voda
+On: 2011-10-20 15:25:19.474677 Event: Connected to Receiver Handler
+On: 2011-10-20 15:25:19.474957 Event: Receiver Handler respond
+On: 2011-10-20 15:25:19.475140 Event: Receiver handler : Ready
+On: 2011-10-20 15:25:19.475172 Event: Start Call
+On: 2011-10-20 15:25:19.477374 Event: Waiting Feedback
+On: 2011-10-20 15:25:34.477579 Event: Test Failed
+On: 2011-10-20 15:25:38.547840 Event:
+On: 2011-10-20 15:25:38.547902 Event: init Caller
+On: 2011-10-20 15:25:38.547922 Event: sip
+On: 2011-10-20 15:25:40.556853 Event: Connected to Caller Handler
+On: 2011-10-20 15:25:40.557152 Event: Caller Handler respond
+On: 2011-10-20 15:25:40.558361 Event: Caller handler : Ready
+On: 2011-10-20 15:25:40.558399 Event: init Receiver
+On: 2011-10-20 15:25:40.558419 Event: GSMRZ2
+On: 2011-10-20 15:25:47.567399 Event: Connected to Receiver Handler
+On: 2011-10-20 15:25:47.575498 Event: Receiver Handler respond
+On: 2011-10-20 15:25:47.580384 Event: Receiver handler : Ready
+On: 2011-10-20 15:25:47.580456 Event: Start Call
+On: 2011-10-20 15:25:47.580533 Event: Waiting Feedback
+On: 2011-10-20 15:25:53.417075 Event: Test Succeed
+
+
+------------------STARTED THE LOGGING 2011-10-20 16:02:45.892295 ------------------
+On: 2011-10-20 16:02:45.892371 Event: init Caller
+On: 2011-10-20 16:02:45.892395 Event: unisip
+On: 2011-10-20 16:02:47.897465 Event: Connected to Caller Handler
+On: 2011-10-20 16:02:47.897794 Event: Caller Handler respond
+On: 2011-10-20 16:02:47.898639 Event: Caller handler : Ready
+On: 2011-10-20 16:02:47.898680 Event: init Receiver
+On: 2011-10-20 16:02:47.898700 Event: GSMRZ3
+On: 2011-10-20 16:02:54.907358 Event: Connected to Receiver Handler
+On: 2011-10-20 16:02:54.915716 Event: Receiver Handler respond
+On: 2011-10-20 16:02:54.917823 Event: Receiver handler : Ready
+On: 2011-10-20 16:02:54.917869 Event: Start Call
+On: 2011-10-20 16:02:54.917930 Event: Waiting Feedback
+On: 2011-10-20 16:03:00.009352 Event: Test Succeed
+On: 2011-10-20 16:03:04.054965 Event:
+On: 2011-10-20 16:03:04.055028 Event: init Caller
+On: 2011-10-20 16:03:04.055048 Event: GSMRZ1
+On: 2011-10-20 16:03:06.058405 Event: Cannt connect to Caller
+On: 2011-10-20 16:03:06.058470 Event: 999 General Handler Error: Could not connect to Caller handler
+On: 2011-10-20 16:03:10.139212 Event:
+On: 2011-10-20 16:03:10.139274 Event: init Caller
+On: 2011-10-20 16:03:10.139294 Event: landline
+On: 2011-10-20 16:03:12.148627 Event: Connected to Caller Handler
+On: 2011-10-20 16:03:12.149014 Event: Caller Handler respond
+On: 2011-10-20 16:03:12.151775 Event: Caller handler : Ready
+On: 2011-10-20 16:03:12.151813 Event: init Receiver
+On: 2011-10-20 16:03:12.151834 Event: GSMRZ2
+On: 2011-10-20 16:03:19.156974 Event: Connected to Receiver Handler
+On: 2011-10-20 16:03:19.165232 Event: Receiver Handler respond
+On: 2011-10-20 16:03:19.167559 Event: Receiver handler : Ready
+On: 2011-10-20 16:03:19.167618 Event: Start Call
+On: 2011-10-20 16:03:19.167763 Event: Waiting Feedback
+On: 2011-10-20 16:03:27.613357 Event: Test Succeed
+On: 2011-10-20 16:03:31.656489 Event:
+On: 2011-10-20 16:03:31.656546 Event: init Caller
+On: 2011-10-20 16:03:31.656566 Event: sip
+On: 2011-10-20 16:03:33.661602 Event: Connected to Caller Handler
+On: 2011-10-20 16:03:33.661939 Event: Caller Handler respond
+On: 2011-10-20 16:03:33.662703 Event: Caller handler : Ready
+On: 2011-10-20 16:03:33.662741 Event: init Receiver
+On: 2011-10-20 16:03:33.662762 Event: GSMExt.O2
+On: 2011-10-20 16:03:35.666639 Event: Connected to Receiver Handler
+On: 2011-10-20 16:03:35.666929 Event: Receiver Handler respond
+On: 2011-10-20 16:03:35.667105 Event: Receiver handler : Ready
+On: 2011-10-20 16:03:35.667137 Event: Start Call
+On: 2011-10-20 16:03:35.667189 Event: Waiting Feedback
+On: 2011-10-20 16:03:50.667382 Event: Test Failed
+On: 2011-10-20 16:03:54.747936 Event:
+On: 2011-10-20 16:03:54.748002 Event: init Caller
+On: 2011-10-20 16:03:54.748021 Event: sip
+On: 2011-10-20 16:03:56.754129 Event: Connected to Caller Handler
+On: 2011-10-20 16:03:56.754427 Event: Caller Handler respond
+On: 2011-10-20 16:03:56.755193 Event: Caller handler : Ready
+On: 2011-10-20 16:03:56.755232 Event: init Receiver
+On: 2011-10-20 16:03:56.755253 Event: GSMExt.Tm
+On: 2011-10-20 16:03:58.760893 Event: Connected to Receiver Handler
+On: 2011-10-20 16:03:58.761170 Event: Receiver Handler respond
+On: 2011-10-20 16:03:58.761348 Event: Receiver handler : Ready
+On: 2011-10-20 16:03:58.761379 Event: Start Call
+On: 2011-10-20 16:03:58.765874 Event: Waiting Feedback
+On: 2011-10-20 16:04:13.766043 Event: Test Failed
+On: 2011-10-20 16:04:17.840852 Event:
+On: 2011-10-20 16:04:17.840915 Event: init Caller
+On: 2011-10-20 16:04:17.840935 Event: sip
+On: 2011-10-20 16:04:19.846568 Event: Connected to Caller Handler
+On: 2011-10-20 16:04:19.846860 Event: Caller Handler respond
+On: 2011-10-20 16:04:19.847621 Event: Caller handler : Ready
+On: 2011-10-20 16:04:19.847658 Event: init Receiver
+On: 2011-10-20 16:04:19.847679 Event: GSMExt.Voda
+On: 2011-10-20 16:04:21.851195 Event: Connected to Receiver Handler
+On: 2011-10-20 16:04:21.851474 Event: Receiver Handler respond
+On: 2011-10-20 16:04:21.851655 Event: Receiver handler : Ready
+On: 2011-10-20 16:04:21.851687 Event: Start Call
+On: 2011-10-20 16:04:21.851741 Event: Waiting Feedback
+On: 2011-10-20 16:04:36.852014 Event: Test Failed
+
+
+------------------STARTED THE LOGGING 2011-10-20 16:07:07.041905 ------------------
+On: 2011-10-20 16:07:07.041984 Event: init Caller
+On: 2011-10-20 16:07:07.042008 Event: unisip
+On: 2011-10-20 16:07:09.046813 Event: Connected to Caller Handler
+On: 2011-10-20 16:07:09.047127 Event: Caller Handler respond
+On: 2011-10-20 16:07:09.047889 Event: Caller handler : Ready
+On: 2011-10-20 16:07:09.047929 Event: init Receiver
+On: 2011-10-20 16:07:09.047950 Event: GSMRZ3
+On: 2011-10-20 16:07:16.060127 Event: Connected to Receiver Handler
+On: 2011-10-20 16:07:16.068277 Event: Receiver Handler respond
+On: 2011-10-20 16:07:16.070497 Event: Receiver handler : Ready
+On: 2011-10-20 16:07:16.070556 Event: Start Call
+On: 2011-10-20 16:07:16.070699 Event: Waiting Feedback
+On: 2011-10-20 16:07:21.262371 Event: Test Succeed
+On: 2011-10-20 16:07:25.308137 Event:
+On: 2011-10-20 16:07:25.308201 Event: init Caller
+On: 2011-10-20 16:07:25.308221 Event: GSMRZ1
+On: 2011-10-20 16:07:27.314245 Event: Cannt connect to Caller
+On: 2011-10-20 16:07:27.314314 Event: 999 General Handler Error: Could not connect to Caller handler
+On: 2011-10-20 16:07:31.395492 Event:
+On: 2011-10-20 16:07:31.395555 Event: init Caller
+On: 2011-10-20 16:07:31.395576 Event: landline
+On: 2011-10-20 16:07:33.400765 Event: Connected to Caller Handler
+On: 2011-10-20 16:07:33.401148 Event: Caller Handler respond
+On: 2011-10-20 16:07:33.438727 Event: Caller handler : Ready
+On: 2011-10-20 16:07:33.438763 Event: init Receiver
+On: 2011-10-20 16:07:33.438796 Event: GSMRZ2
+On: 2011-10-20 16:07:40.446276 Event: Connected to Receiver Handler
+On: 2011-10-20 16:07:40.453654 Event: Receiver Handler respond
+On: 2011-10-20 16:07:40.455917 Event: Receiver handler : Ready
+On: 2011-10-20 16:07:40.455981 Event: Start Call
+On: 2011-10-20 16:07:40.456051 Event: Waiting Feedback
+On: 2011-10-20 16:07:47.681889 Event: Test Succeed
+On: 2011-10-20 16:07:51.747358 Event:
+On: 2011-10-20 16:07:51.747419 Event: init Caller
+On: 2011-10-20 16:07:51.747439 Event: sip
+On: 2011-10-20 16:07:53.750563 Event: Connected to Caller Handler
+On: 2011-10-20 16:07:53.750858 Event: Caller Handler respond
+On: 2011-10-20 16:07:53.751628 Event: Caller handler : Ready
+On: 2011-10-20 16:07:53.751666 Event: init Receiver
+On: 2011-10-20 16:07:53.751687 Event: GSMExt.O2
+On: 2011-10-20 16:07:55.757777 Event: Connected to Receiver Handler
+On: 2011-10-20 16:07:55.758091 Event: Receiver Handler respond
+On: 2011-10-20 16:07:55.758275 Event: Receiver handler : Ready
+On: 2011-10-20 16:07:55.758305 Event: Start Call
+On: 2011-10-20 16:07:55.758358 Event: Waiting Feedback
+On: 2011-10-20 16:08:10.758517 Event: Test Failed
+On: 2011-10-20 16:08:14.847185 Event:
+On: 2011-10-20 16:08:14.847248 Event: init Caller
+On: 2011-10-20 16:08:14.847268 Event: sip
+On: 2011-10-20 16:08:16.854479 Event: Connected to Caller Handler
+On: 2011-10-20 16:08:16.854876 Event: Caller Handler respond
+On: 2011-10-20 16:08:16.855652 Event: Caller handler : Ready
+On: 2011-10-20 16:08:16.855690 Event: init Receiver
+On: 2011-10-20 16:08:16.855711 Event: GSMExt.Tm
+On: 2011-10-20 16:08:18.861157 Event: Connected to Receiver Handler
+On: 2011-10-20 16:08:18.861440 Event: Receiver Handler respond
+On: 2011-10-20 16:08:18.861622 Event: Receiver handler : Ready
+On: 2011-10-20 16:08:18.861653 Event: Start Call
+On: 2011-10-20 16:08:18.865170 Event: Waiting Feedback
+On: 2011-10-20 16:08:33.865381 Event: Test Failed
+On: 2011-10-20 16:08:37.940803 Event:
+On: 2011-10-20 16:08:37.940871 Event: init Caller
+On: 2011-10-20 16:08:37.940890 Event: sip
+On: 2011-10-20 16:08:39.947394 Event: Connected to Caller Handler
+On: 2011-10-20 16:08:39.947699 Event: Caller Handler respond
+On: 2011-10-20 16:08:39.948459 Event: Caller handler : Ready
+On: 2011-10-20 16:08:39.948498 Event: init Receiver
+On: 2011-10-20 16:08:39.948519 Event: GSMExt.Voda
+On: 2011-10-20 16:08:41.954116 Event: Connected to Receiver Handler
+On: 2011-10-20 16:08:41.954453 Event: Receiver Handler respond
+On: 2011-10-20 16:08:41.954640 Event: Receiver handler : Ready
+On: 2011-10-20 16:08:41.954670 Event: Start Call
+On: 2011-10-20 16:08:41.954724 Event: Waiting Feedback
+On: 2011-10-20 16:08:56.954955 Event: Test Failed
+On: 2011-10-20 16:09:01.045978 Event:
+On: 2011-10-20 16:09:01.046043 Event: init Caller
+On: 2011-10-20 16:09:01.046063 Event: sip
+On: 2011-10-20 16:09:03.054058 Event: Connected to Caller Handler
+On: 2011-10-20 16:09:03.054355 Event: Caller Handler respond
+On: 2011-10-20 16:09:03.055475 Event: Caller handler : Ready
+On: 2011-10-20 16:09:03.055514 Event: init Receiver
+On: 2011-10-20 16:09:03.055535 Event: GSMExt.Eplus
+On: 2011-10-20 16:09:05.060966 Event: Connected to Receiver Handler
+On: 2011-10-20 16:09:05.061251 Event: Receiver Handler respond
+On: 2011-10-20 16:09:05.061429 Event: Receiver handler : Ready
+On: 2011-10-20 16:09:05.061459 Event: Start Call
+On: 2011-10-20 16:09:05.061521 Event: Waiting Feedback
+On: 2011-10-20 16:09:20.061686 Event: Test Failed
+
+
+------------------STARTED THE LOGGING 2011-10-20 16:13:17.880180 ------------------
+On: 2011-10-20 16:13:17.880258 Event: init Caller
+On: 2011-10-20 16:13:17.880281 Event: unisip
+On: 2011-10-20 16:13:19.885581 Event: Connected to Caller Handler
+On: 2011-10-20 16:13:19.885932 Event: Caller Handler respond
+On: 2011-10-20 16:13:19.886691 Event: Caller handler : Ready
+On: 2011-10-20 16:13:19.886727 Event: init Receiver
+On: 2011-10-20 16:13:19.886747 Event: GSMRZ2
+On: 2011-10-20 16:13:26.894386 Event: Connected to Receiver Handler
+On: 2011-10-20 16:13:26.901589 Event: Receiver Handler respond
+On: 2011-10-20 16:13:26.904214 Event: Receiver handler : Ready
+On: 2011-10-20 16:13:26.904266 Event: Start Call
+On: 2011-10-20 16:13:26.904328 Event: Waiting Feedback
+On: 2011-10-20 16:13:32.215845 Event: Test Succeed
+On: 2011-10-20 16:13:36.260075 Event:
+On: 2011-10-20 16:13:36.260137 Event: init Caller
+On: 2011-10-20 16:13:36.260157 Event: GSMRZ1
+On: 2011-10-20 16:13:38.265130 Event: Cannt connect to Caller
+On: 2011-10-20 16:13:38.265194 Event: 999 General Handler Error: Could not connect to Caller handler
+On: 2011-10-20 16:13:42.342828 Event:
+On: 2011-10-20 16:13:42.342893 Event: init Caller
+On: 2011-10-20 16:13:42.342912 Event: landline
+On: 2011-10-20 16:13:44.350340 Event: Connected to Caller Handler
+On: 2011-10-20 16:13:44.350725 Event: Caller Handler respond
+On: 2011-10-20 16:13:44.352684 Event: Caller handler : Ready
+On: 2011-10-20 16:13:44.352721 Event: init Receiver
+On: 2011-10-20 16:13:44.352742 Event: GSMRZ3
+On: 2011-10-20 16:13:51.358282 Event: Connected to Receiver Handler
+On: 2011-10-20 16:13:51.366907 Event: Receiver Handler respond
+On: 2011-10-20 16:13:51.369060 Event: Receiver handler : Ready
+On: 2011-10-20 16:13:51.369097 Event: Start Call
+On: 2011-10-20 16:13:51.369155 Event: Waiting Feedback
+On: 2011-10-20 16:13:59.525921 Event: Test Succeed
+On: 2011-10-20 16:14:03.568990 Event:
+On: 2011-10-20 16:14:03.569050 Event: init Caller
+On: 2011-10-20 16:14:03.569070 Event: sip
+On: 2011-10-20 16:14:05.574091 Event: Connected to Caller Handler
+On: 2011-10-20 16:14:05.574483 Event: Caller Handler respond
+On: 2011-10-20 16:14:05.575264 Event: Caller handler : Ready
+On: 2011-10-20 16:14:05.575301 Event: init Receiver
+On: 2011-10-20 16:14:05.575322 Event: GSMExt.Eplus
+On: 2011-10-20 16:14:07.578700 Event: Connected to Receiver Handler
+On: 2011-10-20 16:14:07.578978 Event: Receiver Handler respond
+On: 2011-10-20 16:14:07.579147 Event: Receiver handler : Ready
+On: 2011-10-20 16:14:07.579173 Event: Start Call
+On: 2011-10-20 16:14:07.579225 Event: Waiting Feedback
+On: 2011-10-20 16:14:22.579383 Event: Test Failed
+On: 2011-10-20 16:14:26.657358 Event:
+On: 2011-10-20 16:14:26.657425 Event: init Caller
+On: 2011-10-20 16:14:26.657444 Event: sip
+On: 2011-10-20 16:14:28.662527 Event: Connected to Caller Handler
+On: 2011-10-20 16:14:28.662920 Event: Caller Handler respond
+On: 2011-10-20 16:14:28.664007 Event: Caller handler : Ready
+On: 2011-10-20 16:14:28.664045 Event: init Receiver
+On: 2011-10-20 16:14:28.664066 Event: GSMExt.O2
+On: 2011-10-20 16:14:30.670009 Event: Connected to Receiver Handler
+On: 2011-10-20 16:14:30.670293 Event: Receiver Handler respond
+On: 2011-10-20 16:14:30.670464 Event: Receiver handler : Ready
+On: 2011-10-20 16:14:30.670490 Event: Start Call
+On: 2011-10-20 16:14:30.670541 Event: Waiting Feedback
+On: 2011-10-20 16:14:45.670696 Event: Test Failed
+On: 2011-10-20 16:14:49.750294 Event:
+On: 2011-10-20 16:14:49.750360 Event: init Caller
+On: 2011-10-20 16:14:49.750380 Event: sip
+On: 2011-10-20 16:14:51.754561 Event: Connected to Caller Handler
+On: 2011-10-20 16:14:51.754858 Event: Caller Handler respond
+On: 2011-10-20 16:14:51.755628 Event: Caller handler : Ready
+On: 2011-10-20 16:14:51.755665 Event: init Receiver
+On: 2011-10-20 16:14:51.755686 Event: GSMExt.Voda
+On: 2011-10-20 16:14:53.760483 Event: Connected to Receiver Handler
+On: 2011-10-20 16:14:53.760765 Event: Receiver Handler respond
+On: 2011-10-20 16:14:53.760945 Event: Receiver handler : Ready
+On: 2011-10-20 16:14:53.760976 Event: Start Call
+On: 2011-10-20 16:14:53.761029 Event: Waiting Feedback
+On: 2011-10-20 16:15:08.761278 Event: Test Failed
+On: 2011-10-20 16:15:12.839881 Event:
+On: 2011-10-20 16:15:12.839941 Event: init Caller
+On: 2011-10-20 16:15:12.839961 Event: sip
+On: 2011-10-20 16:15:14.846413 Event: Connected to Caller Handler
+On: 2011-10-20 16:15:14.846837 Event: Caller Handler respond
+On: 2011-10-20 16:15:14.847645 Event: Caller handler : Ready
+On: 2011-10-20 16:15:14.847679 Event: init Receiver
+On: 2011-10-20 16:15:14.847700 Event: GSMExt.Tm
+On: 2011-10-20 16:15:16.853397 Event: Connected to Receiver Handler
+On: 2011-10-20 16:15:16.854085 Event: Receiver Handler respond
+On: 2011-10-20 16:15:16.854560 Event: Receiver handler : Ready
+On: 2011-10-20 16:15:16.854594 Event: Start Call
+On: 2011-10-20 16:15:16.855727 Event: Waiting Feedback
+On: 2011-10-20 16:15:31.855908 Event: Test Failed
+
+
+------------------STARTED THE LOGGING 2011-10-20 16:17:01.817838 ------------------
+On: 2011-10-20 16:17:01.817917 Event: init Caller
+On: 2011-10-20 16:17:01.817942 Event: unisip
+On: 2011-10-20 16:17:03.822685 Event: Connected to Caller Handler
+On: 2011-10-20 16:17:03.823096 Event: Caller Handler respond
+On: 2011-10-20 16:17:03.823870 Event: Caller handler : Ready
+On: 2011-10-20 16:17:03.823909 Event: init Receiver
+On: 2011-10-20 16:17:03.823931 Event: GSMRZ1
+On: 2011-10-20 16:17:05.829143 Event: Cannt connect to Receiver
+On: 2011-10-20 16:17:05.829210 Event: 998 General Handler Error: Could not connect Destination handler
+On: 2011-10-20 16:17:09.907662 Event:
+On: 2011-10-20 16:17:09.907730 Event: init Caller
+On: 2011-10-20 16:17:09.907750 Event: GSMRZ2
+On: 2011-10-20 16:17:16.914923 Event: Connected to Caller Handler
+On: 2011-10-20 16:17:16.922749 Event: Caller Handler respond
+On: 2011-10-20 16:17:16.925019 Event: Caller handler : Ready
+On: 2011-10-20 16:17:16.925054 Event: init Receiver
+On: 2011-10-20 16:17:16.925077 Event: GSMExt.Eplus
+On: 2011-10-20 16:17:18.930888 Event: Connected to Receiver Handler
+On: 2011-10-20 16:17:18.931370 Event: Receiver Handler respond
+On: 2011-10-20 16:17:18.931665 Event: Receiver handler : Ready
+On: 2011-10-20 16:17:18.931698 Event: Start Call
+On: 2011-10-20 16:17:18.933886 Event: Waiting Feedback
+On: 2011-10-20 16:17:33.934108 Event: Test Failed
+On: 2011-10-20 16:17:38.015778 Event:
+On: 2011-10-20 16:17:38.015842 Event: init Caller
+On: 2011-10-20 16:17:38.015862 Event: landline
+On: 2011-10-20 16:17:40.025977 Event: Connected to Caller Handler
+On: 2011-10-20 16:17:40.026374 Event: Caller Handler respond
+On: 2011-10-20 16:17:40.028876 Event: Caller handler : Ready
+On: 2011-10-20 16:17:40.028914 Event: init Receiver
+On: 2011-10-20 16:17:40.028936 Event: GSMRZ3
+On: 2011-10-20 16:17:47.034549 Event: Connected to Receiver Handler
+On: 2011-10-20 16:17:47.041728 Event: Receiver Handler respond
+On: 2011-10-20 16:17:47.043891 Event: Receiver handler : Ready
+On: 2011-10-20 16:17:47.043928 Event: Start Call
+On: 2011-10-20 16:17:47.044066 Event: Waiting Feedback
+On: 2011-10-20 16:17:59.426488 Event: Test Succeed
+On: 2011-10-20 16:18:03.469530 Event:
+On: 2011-10-20 16:18:03.469592 Event: init Caller
+On: 2011-10-20 16:18:03.469614 Event: sip
+On: 2011-10-20 16:18:05.473127 Event: Connected to Caller Handler
+On: 2011-10-20 16:18:05.474263 Event: Caller Handler respond
+On: 2011-10-20 16:18:05.475045 Event: Caller handler : Ready
+On: 2011-10-20 16:18:05.475083 Event: init Receiver
+On: 2011-10-20 16:18:05.475105 Event: GSMExt.O2
+On: 2011-10-20 16:18:07.478712 Event: Connected to Receiver Handler
+On: 2011-10-20 16:18:07.478995 Event: Receiver Handler respond
+On: 2011-10-20 16:18:07.479176 Event: Receiver handler : Ready
+On: 2011-10-20 16:18:07.479206 Event: Start Call
+On: 2011-10-20 16:18:07.479259 Event: Waiting Feedback
+On: 2011-10-20 16:18:22.479422 Event: Test Failed
+On: 2011-10-20 16:18:26.571571 Event:
+On: 2011-10-20 16:18:26.571636 Event: init Caller
+On: 2011-10-20 16:18:26.571657 Event: sip
+On: 2011-10-20 16:18:28.577133 Event: Connected to Caller Handler
+On: 2011-10-20 16:18:28.577433 Event: Caller Handler respond
+On: 2011-10-20 16:18:28.578384 Event: Caller handler : Ready
+On: 2011-10-20 16:18:28.578427 Event: init Receiver
+On: 2011-10-20 16:18:28.578448 Event: GSMExt.Tm
+On: 2011-10-20 16:18:30.582666 Event: Connected to Receiver Handler
+On: 2011-10-20 16:18:30.582957 Event: Receiver Handler respond
+On: 2011-10-20 16:18:30.583145 Event: Receiver handler : Ready
+On: 2011-10-20 16:18:30.583176 Event: Start Call
+On: 2011-10-20 16:18:30.583231 Event: Waiting Feedback
+On: 2011-10-20 16:18:45.583775 Event: Test Failed
+On: 2011-10-20 16:18:49.683360 Event:
+On: 2011-10-20 16:18:49.683423 Event: init Caller
+On: 2011-10-20 16:18:49.683444 Event: sip
+On: 2011-10-20 16:18:51.692228 Event: Connected to Caller Handler
+On: 2011-10-20 16:18:51.692524 Event: Caller Handler respond
+On: 2011-10-20 16:18:51.693301 Event: Caller handler : Ready
+On: 2011-10-20 16:18:51.693338 Event: init Receiver
+On: 2011-10-20 16:18:51.693360 Event: GSMExt.Voda
+On: 2011-10-20 16:18:53.700436 Event: Connected to Receiver Handler
+On: 2011-10-20 16:18:53.700720 Event: Receiver Handler respond
+On: 2011-10-20 16:18:53.700903 Event: Receiver handler : Ready
+On: 2011-10-20 16:18:53.700934 Event: Start Call
+On: 2011-10-20 16:18:53.700989 Event: Waiting Feedback
+On: 2011-10-20 16:19:08.701151 Event: Test Failed
+On: 2011-10-20 16:19:12.761453 Event:
+On: 2011-10-20 16:19:12.761515 Event: init Caller
+On: 2011-10-20 16:19:12.761536 Event: sip
+On: 2011-10-20 16:19:14.778421 Event: Connected to Caller Handler
+On: 2011-10-20 16:19:14.778717 Event: Caller Handler respond
+On: 2011-10-20 16:19:14.779858 Event: Caller handler : Ready
+On: 2011-10-20 16:19:14.779897 Event: init Receiver
+On: 2011-10-20 16:19:14.779919 Event: GSMRZ2
+On: 2011-10-20 16:19:21.787902 Event: Connected to Receiver Handler
+On: 2011-10-20 16:19:21.795681 Event: Receiver Handler respond
+On: 2011-10-20 16:19:21.798676 Event: Receiver handler : Ready
+On: 2011-10-20 16:19:21.798745 Event: Start Call
+On: 2011-10-20 16:19:21.798897 Event: Waiting Feedback
+On: 2011-10-20 16:19:27.653792 Event: Test Succeed
+On: 2011-10-20 16:19:31.696146 Event:
+On: 2011-10-20 16:19:31.696211 Event: init Caller
+On: 2011-10-20 16:19:31.696232 Event: GSMRZ2
+On: 2011-10-20 16:19:38.701894 Event: Connected to Caller Handler
+On: 2011-10-20 16:19:38.710032 Event: Caller Handler respond
+On: 2011-10-20 16:19:38.712311 Event: Caller handler : Ready
+On: 2011-10-20 16:19:38.712346 Event: init Receiver
+On: 2011-10-20 16:19:38.712368 Event: GSMRZ1
+On: 2011-10-20 16:19:40.716813 Event: Cannt connect to Receiver
+On: 2011-10-20 16:19:40.716880 Event: 998 General Handler Error: Could not connect Destination handler
+
+
+------------------STARTED THE LOGGING 2011-10-20 16:43:26.733984 ------------------
+On: 2011-10-20 16:43:26.734065 Event: init Caller
+On: 2011-10-20 16:43:26.734089 Event: unisip
+On: 2011-10-20 16:43:28.739365 Event: Connected to Caller Handler
+On: 2011-10-20 16:43:28.739683 Event: Caller Handler respond
+On: 2011-10-20 16:43:28.740449 Event: Caller handler : Ready
+On: 2011-10-20 16:43:28.740488 Event: init Receiver
+On: 2011-10-20 16:43:28.740510 Event: GSMRZ1
+On: 2011-10-20 16:43:30.746195 Event: Cannt connect to Receiver
+On: 2011-10-20 16:43:30.746260 Event: 998 General Handler Error: Could not connect Destination handler
+On: 2011-10-20 16:43:34.830397 Event:
+On: 2011-10-20 16:43:34.830466 Event: init Caller
+On: 2011-10-20 16:43:34.830486 Event: GSMRZ2
+On: 2011-10-20 16:43:41.843358 Event: Connected to Caller Handler
+On: 2011-10-20 16:43:41.850560 Event: Caller Handler respond
+On: 2011-10-20 16:43:41.853439 Event: Caller handler : Ready
+On: 2011-10-20 16:43:41.853483 Event: init Receiver
+On: 2011-10-20 16:43:41.853506 Event: GSMExt.Voda
+On: 2011-10-20 16:43:43.858660 Event: Connected to Receiver Handler
+On: 2011-10-20 16:43:43.858948 Event: Receiver Handler respond
+On: 2011-10-20 16:43:43.859135 Event: Receiver handler : Ready
+On: 2011-10-20 16:43:43.859166 Event: Start Call
+On: 2011-10-20 16:43:43.862194 Event: Waiting Feedback
+On: 2011-10-20 16:43:58.862403 Event: Test Failed
+On: 2011-10-20 16:44:02.945911 Event:
+On: 2011-10-20 16:44:02.945973 Event: init Caller
+On: 2011-10-20 16:44:02.945994 Event: landline
+On: 2011-10-20 16:44:04.949868 Event: Connected to Caller Handler
+On: 2011-10-20 16:44:04.950987 Event: Caller Handler respond
+On: 2011-10-20 16:44:04.953450 Event: Caller handler : Ready
+On: 2011-10-20 16:44:04.953490 Event: init Receiver
+On: 2011-10-20 16:44:04.953513 Event: GSMRZ3
+On: 2011-10-20 16:44:11.963436 Event: Connected to Receiver Handler
+On: 2011-10-20 16:44:11.970860 Event: Receiver Handler respond
+On: 2011-10-20 16:44:11.973871 Event: Receiver handler : Ready
+On: 2011-10-20 16:44:11.973928 Event: Start Call
+On: 2011-10-20 16:44:11.974071 Event: Waiting Feedback
+On: 2011-10-20 16:44:20.168481 Event: Test Succeed
+On: 2011-10-20 16:44:24.214754 Event:
+On: 2011-10-20 16:44:24.214813 Event: init Caller
+On: 2011-10-20 16:44:24.214834 Event: sip
+On: 2011-10-20 16:44:26.218544 Event: Connected to Caller Handler
+On: 2011-10-20 16:44:26.218832 Event: Caller Handler respond
+On: 2011-10-20 16:44:26.219588 Event: Caller handler : Ready
+On: 2011-10-20 16:44:26.219627 Event: init Receiver
+On: 2011-10-20 16:44:26.219649 Event: GSMExt.Eplus
+On: 2011-10-20 16:44:28.225084 Event: Connected to Receiver Handler
+On: 2011-10-20 16:44:28.225367 Event: Receiver Handler respond
+On: 2011-10-20 16:44:28.225548 Event: Receiver handler : Ready
+On: 2011-10-20 16:44:28.225579 Event: Start Call
+On: 2011-10-20 16:44:28.225633 Event: Waiting Feedback
+On: 2011-10-20 16:44:43.225829 Event: Test Failed
+On: 2011-10-20 16:44:47.317006 Event:
+On: 2011-10-20 16:44:47.317074 Event: init Caller
+On: 2011-10-20 16:44:47.317095 Event: sip
+On: 2011-10-20 16:44:49.324783 Event: Connected to Caller Handler
+On: 2011-10-20 16:44:49.325078 Event: Caller Handler respond
+On: 2011-10-20 16:44:49.325898 Event: Caller handler : Ready
+On: 2011-10-20 16:44:49.325935 Event: init Receiver
+On: 2011-10-20 16:44:49.325957 Event: GSMExt.O2
+On: 2011-10-20 16:44:51.330643 Event: Connected to Receiver Handler
+On: 2011-10-20 16:44:51.330921 Event: Receiver Handler respond
+On: 2011-10-20 16:44:51.331105 Event: Receiver handler : Ready
+On: 2011-10-20 16:44:51.331135 Event: Start Call
+On: 2011-10-20 16:44:51.331190 Event: Waiting Feedback
+On: 2011-10-20 16:45:06.331358 Event: Test Failed
+On: 2011-10-20 16:45:10.410565 Event:
+On: 2011-10-20 16:45:10.410630 Event: init Caller
+On: 2011-10-20 16:45:10.410651 Event: sip
+On: 2011-10-20 16:45:12.415884 Event: Connected to Caller Handler
+On: 2011-10-20 16:45:12.416174 Event: Caller Handler respond
+On: 2011-10-20 16:45:12.417303 Event: Caller handler : Ready
+On: 2011-10-20 16:45:12.417341 Event: init Receiver
+On: 2011-10-20 16:45:12.417363 Event: GSMExt.Tm
+On: 2011-10-20 16:45:14.422968 Event: Connected to Receiver Handler
+On: 2011-10-20 16:45:14.423255 Event: Receiver Handler respond
+On: 2011-10-20 16:45:14.423436 Event: Receiver handler : Ready
+On: 2011-10-20 16:45:14.423466 Event: Start Call
+On: 2011-10-20 16:45:14.423522 Event: Waiting Feedback
+On: 2011-10-20 16:45:29.423679 Event: Test Failed
+On: 2011-10-20 16:45:33.481122 Event:
+On: 2011-10-20 16:45:33.481184 Event: init Caller
+On: 2011-10-20 16:45:33.481205 Event: sip
+On: 2011-10-20 16:45:35.493277 Event: Connected to Caller Handler
+On: 2011-10-20 16:45:35.493575 Event: Caller Handler respond
+On: 2011-10-20 16:45:35.494400 Event: Caller handler : Ready
+On: 2011-10-20 16:45:35.494438 Event: init Receiver
+On: 2011-10-20 16:45:35.494459 Event: GSMRZ2
+On: 2011-10-20 16:45:42.503079 Event: Connected to Receiver Handler
+On: 2011-10-20 16:45:42.510414 Event: Receiver Handler respond
+On: 2011-10-20 16:45:42.512614 Event: Receiver handler : Ready
+On: 2011-10-20 16:45:42.512649 Event: Start Call
+On: 2011-10-20 16:45:42.512787 Event: Waiting Feedback
+On: 2011-10-20 16:45:48.279891 Event: Test Succeed
+
+
+------------------STARTED THE LOGGING 2011-10-20 16:47:39.124279 ------------------
+On: 2011-10-20 16:47:39.124356 Event: init Caller
+On: 2011-10-20 16:47:39.124381 Event: unisip
+On: 2011-10-20 16:47:41.129641 Event: Connected to Caller Handler
+On: 2011-10-20 16:47:41.130002 Event: Caller Handler respond
+On: 2011-10-20 16:47:41.130773 Event: Caller handler : Ready
+On: 2011-10-20 16:47:41.130812 Event: init Receiver
+On: 2011-10-20 16:47:41.130834 Event: GSMRZ3
+On: 2011-10-20 16:47:48.139368 Event: Connected to Receiver Handler
+On: 2011-10-20 16:47:48.147176 Event: Receiver Handler respond
+On: 2011-10-20 16:47:48.149362 Event: Receiver handler : Ready
+On: 2011-10-20 16:47:48.149399 Event: Start Call
+On: 2011-10-20 16:47:48.149535 Event: Waiting Feedback
+On: 2011-10-20 16:47:54.489418 Event: Test Succeed
+On: 2011-10-20 16:47:58.530388 Event:
+On: 2011-10-20 16:47:58.530449 Event: init Caller
+On: 2011-10-20 16:47:58.530470 Event: GSMRZ1
+On: 2011-10-20 16:48:00.534401 Event: Cannt connect to Caller
+On: 2011-10-20 16:48:00.534464 Event: 999 General Handler Error: Could not connect to Caller handler
+On: 2011-10-20 16:48:04.613193 Event:
+On: 2011-10-20 16:48:04.613255 Event: init Caller
+On: 2011-10-20 16:48:04.613275 Event: landline
+On: 2011-10-20 16:48:06.618815 Event: Connected to Caller Handler
+On: 2011-10-20 16:48:06.619452 Event: Caller Handler respond
+On: 2011-10-20 16:48:06.621843 Event: Caller handler : Ready
+On: 2011-10-20 16:48:06.621884 Event: init Receiver
+On: 2011-10-20 16:48:06.621906 Event: GSMRZ2
+On: 2011-10-20 16:48:13.629094 Event: Connected to Receiver Handler
+On: 2011-10-20 16:48:13.636360 Event: Receiver Handler respond
+On: 2011-10-20 16:48:13.639127 Event: Receiver handler : Ready
+On: 2011-10-20 16:48:13.639188 Event: Start Call
+On: 2011-10-20 16:48:13.639335 Event: Waiting Feedback
+On: 2011-10-20 16:48:21.567941 Event: Test Succeed
+On: 2011-10-20 16:48:25.610285 Event:
+On: 2011-10-20 16:48:25.610343 Event: init Caller
+On: 2011-10-20 16:48:25.610364 Event: sip
+On: 2011-10-20 16:48:27.615371 Event: Connected to Caller Handler
+On: 2011-10-20 16:48:27.615661 Event: Caller Handler respond
+On: 2011-10-20 16:48:27.616782 Event: Caller handler : Ready
+On: 2011-10-20 16:48:27.616820 Event: init Receiver
+On: 2011-10-20 16:48:27.616841 Event: GSMExt.Eplus
+On: 2011-10-20 16:48:29.622279 Event: Connected to Receiver Handler
+On: 2011-10-20 16:48:29.622561 Event: Receiver Handler respond
+On: 2011-10-20 16:48:29.622743 Event: Receiver handler : Ready
+On: 2011-10-20 16:48:29.622774 Event: Start Call
+On: 2011-10-20 16:48:29.622826 Event: Waiting Feedback
+On: 2011-10-20 16:48:44.622993 Event: Test Failed
+On: 2011-10-20 16:48:48.701111 Event:
+On: 2011-10-20 16:48:48.701175 Event: init Caller
+On: 2011-10-20 16:48:48.701196 Event: sip
+On: 2011-10-20 16:48:50.707375 Event: Connected to Caller Handler
+On: 2011-10-20 16:48:50.707665 Event: Caller Handler respond
+On: 2011-10-20 16:48:50.708417 Event: Caller handler : Ready
+On: 2011-10-20 16:48:50.708454 Event: init Receiver
+On: 2011-10-20 16:48:50.708475 Event: GSMExt.O2
+On: 2011-10-20 16:48:52.713490 Event: Connected to Receiver Handler
+On: 2011-10-20 16:48:52.713834 Event: Receiver Handler respond
+On: 2011-10-20 16:48:52.714031 Event: Receiver handler : Ready
+On: 2011-10-20 16:48:52.714061 Event: Start Call
+On: 2011-10-20 16:48:52.714114 Event: Waiting Feedback
+On: 2011-10-20 16:49:07.714275 Event: Test Failed
+On: 2011-10-20 16:49:11.791903 Event:
+On: 2011-10-20 16:49:11.791968 Event: init Caller
+On: 2011-10-20 16:49:11.791988 Event: sip
+On: 2011-10-20 16:49:13.798784 Event: Connected to Caller Handler
+On: 2011-10-20 16:49:13.799119 Event: Caller Handler respond
+On: 2011-10-20 16:49:13.800246 Event: Caller handler : Ready
+On: 2011-10-20 16:49:13.800283 Event: init Receiver
+On: 2011-10-20 16:49:13.800304 Event: GSMExt.Tm
+On: 2011-10-20 16:49:15.805670 Event: Connected to Receiver Handler
+On: 2011-10-20 16:49:15.806021 Event: Receiver Handler respond
+On: 2011-10-20 16:49:15.806207 Event: Receiver handler : Ready
+On: 2011-10-20 16:49:15.806238 Event: Start Call
+On: 2011-10-20 16:49:15.806293 Event: Waiting Feedback
+On: 2011-10-20 16:49:30.806528 Event: Test Failed
+On: 2011-10-20 16:49:36.872992 Event:
+On: 2011-10-20 16:49:36.873049 Event: init Caller
+On: 2011-10-20 16:49:36.873070 Event: sip
+On: 2011-10-20 16:49:38.878120 Event: Connected to Caller Handler
+On: 2011-10-20 16:49:38.878417 Event: Caller Handler respond
+On: 2011-10-20 16:49:38.879180 Event: Caller handler : Ready
+On: 2011-10-20 16:49:38.879218 Event: init Receiver
+On: 2011-10-20 16:49:38.879240 Event: GSMExt.Voda
+On: 2011-10-20 16:49:40.882643 Event: Connected to Receiver Handler
+On: 2011-10-20 16:49:40.882929 Event: Receiver Handler respond
+On: 2011-10-20 16:49:40.883110 Event: Receiver handler : Ready
+On: 2011-10-20 16:49:40.883140 Event: Start Call
+On: 2011-10-20 16:49:40.883194 Event: Waiting Feedback
+On: 2011-10-20 16:49:55.883358 Event: Test Failed
+On: 2011-10-20 16:49:59.940621 Event:
+On: 2011-10-20 16:49:59.940682 Event: init Caller
+On: 2011-10-20 16:49:59.940702 Event: sip
+On: 2011-10-20 16:50:01.956790 Event: Connected to Caller Handler
+On: 2011-10-20 16:50:01.957085 Event: Caller Handler respond
+On: 2011-10-20 16:50:01.958263 Event: Caller handler : Ready
+On: 2011-10-20 16:50:01.958301 Event: init Receiver
+On: 2011-10-20 16:50:01.958323 Event: GSMRZ2
+On: 2011-10-20 16:50:08.967335 Event: Connected to Receiver Handler
+On: 2011-10-20 16:50:08.974882 Event: Receiver Handler respond
+On: 2011-10-20 16:50:08.977058 Event: Receiver handler : Ready
+On: 2011-10-20 16:50:08.977103 Event: Start Call
+On: 2011-10-20 16:50:08.977168 Event: Waiting Feedback
+On: 2011-10-20 16:50:14.276272 Event: Test Succeed
+
+
+------------------STARTED THE LOGGING 2011-10-20 16:51:38.883398 ------------------
+On: 2011-10-20 16:51:38.883477 Event: init Caller
+On: 2011-10-20 16:51:38.883501 Event: unisip
+On: 2011-10-20 16:51:40.886811 Event: Connected to Caller Handler
+On: 2011-10-20 16:51:40.887117 Event: Caller Handler respond
+On: 2011-10-20 16:51:40.887885 Event: Caller handler : Ready
+On: 2011-10-20 16:51:40.887923 Event: init Receiver
+On: 2011-10-20 16:51:40.887945 Event: GSMRZ3
+On: 2011-10-20 16:51:47.896907 Event: Connected to Receiver Handler
+On: 2011-10-20 16:51:47.904146 Event: Receiver Handler respond
+On: 2011-10-20 16:51:47.907175 Event: Receiver handler : Ready
+On: 2011-10-20 16:51:47.907241 Event: Start Call
+On: 2011-10-20 16:51:47.907386 Event: Waiting Feedback
+On: 2011-10-20 16:51:52.929447 Event: Test Succeed
+On: 2011-10-20 16:51:56.975900 Event:
+On: 2011-10-20 16:51:56.975961 Event: init Caller
+On: 2011-10-20 16:51:56.975981 Event: GSMRZ1
+On: 2011-10-20 16:51:58.980941 Event: Cannt connect to Caller
+On: 2011-10-20 16:51:58.981005 Event: 999 General Handler Error: Could not connect to Caller handler
+On: 2011-10-20 16:52:03.060182 Event:
+On: 2011-10-20 16:52:03.060246 Event: init Caller
+On: 2011-10-20 16:52:03.060267 Event: landline
+On: 2011-10-20 16:52:05.066107 Event: Connected to Caller Handler
+On: 2011-10-20 16:52:05.066396 Event: Caller Handler respond
+On: 2011-10-20 16:52:05.069066 Event: Caller handler : Ready
+On: 2011-10-20 16:52:05.069100 Event: init Receiver
+On: 2011-10-20 16:52:05.069122 Event: GSMRZ2
+On: 2011-10-20 16:52:12.076707 Event: Connected to Receiver Handler
+On: 2011-10-20 16:52:12.083999 Event: Receiver Handler respond
+On: 2011-10-20 16:52:12.087151 Event: Receiver handler : Ready
+On: 2011-10-20 16:52:12.087218 Event: Start Call
+On: 2011-10-20 16:52:12.087290 Event: Waiting Feedback
+On: 2011-10-20 16:52:25.231350 Event: Test Succeed
+On: 2011-10-20 16:52:29.273801 Event:
+On: 2011-10-20 16:52:29.273861 Event: init Caller
+On: 2011-10-20 16:52:29.273881 Event: sip
+On: 2011-10-20 16:52:31.278954 Event: Connected to Caller Handler
+On: 2011-10-20 16:52:31.279239 Event: Caller Handler respond
+On: 2011-10-20 16:52:31.279993 Event: Caller handler : Ready
+On: 2011-10-20 16:52:31.280031 Event: init Receiver
+On: 2011-10-20 16:52:31.280053 Event: GSMExt.Eplus
+On: 2011-10-20 16:52:33.285432 Event: Connected to Receiver Handler
+On: 2011-10-20 16:52:33.285750 Event: Receiver Handler respond
+On: 2011-10-20 16:52:33.285961 Event: Receiver handler : Ready
+On: 2011-10-20 16:52:33.285993 Event: Start Call
+On: 2011-10-20 16:52:33.286050 Event: Waiting Feedback
+On: 2011-10-20 16:52:48.286212 Event: Test Failed
+On: 2011-10-20 16:52:52.364294 Event:
+On: 2011-10-20 16:52:52.364356 Event: init Caller
+On: 2011-10-20 16:52:52.364376 Event: sip
+On: 2011-10-20 16:52:54.372821 Event: Connected to Caller Handler
+On: 2011-10-20 16:52:54.373115 Event: Caller Handler respond
+On: 2011-10-20 16:52:54.373939 Event: Caller handler : Ready
+On: 2011-10-20 16:52:54.373977 Event: init Receiver
+On: 2011-10-20 16:52:54.373999 Event: GSMExt.O2
+On: 2011-10-20 16:52:56.378651 Event: Connected to Receiver Handler
+On: 2011-10-20 16:52:56.378936 Event: Receiver Handler respond
+On: 2011-10-20 16:52:56.379124 Event: Receiver handler : Ready
+On: 2011-10-20 16:52:56.379155 Event: Start Call
+On: 2011-10-20 16:52:56.379211 Event: Waiting Feedback
+On: 2011-10-20 16:53:11.379368 Event: Test Failed
+On: 2011-10-20 16:53:15.457901 Event:
+On: 2011-10-20 16:53:15.457965 Event: init Caller
+On: 2011-10-20 16:53:15.457985 Event: sip
+On: 2011-10-20 16:53:17.464995 Event: Connected to Caller Handler
+On: 2011-10-20 16:53:17.465289 Event: Caller Handler respond
+On: 2011-10-20 16:53:17.466130 Event: Caller handler : Ready
+On: 2011-10-20 16:53:17.466168 Event: init Receiver
+On: 2011-10-20 16:53:17.466190 Event: GSMExt.Voda
+On: 2011-10-20 16:53:19.470643 Event: Connected to Receiver Handler
+On: 2011-10-20 16:53:19.470920 Event: Receiver Handler respond
+On: 2011-10-20 16:53:19.471099 Event: Receiver handler : Ready
+On: 2011-10-20 16:53:19.471130 Event: Start Call
+On: 2011-10-20 16:53:19.473768 Event: Waiting Feedback
+On: 2011-10-20 16:53:34.475826 Event: Test Failed
+On: 2011-10-20 16:53:38.574194 Event:
+On: 2011-10-20 16:53:38.574259 Event: init Caller
+On: 2011-10-20 16:53:38.574279 Event: sip
+On: 2011-10-20 16:53:40.583589 Event: Connected to Caller Handler
+On: 2011-10-20 16:53:40.583881 Event: Caller Handler respond
+On: 2011-10-20 16:53:40.584646 Event: Caller handler : Ready
+On: 2011-10-20 16:53:40.584685 Event: init Receiver
+On: 2011-10-20 16:53:40.584707 Event: GSMExt.Tm
+On: 2011-10-20 16:53:42.590538 Event: Connected to Receiver Handler
+On: 2011-10-20 16:53:42.590824 Event: Receiver Handler respond
+On: 2011-10-20 16:53:42.591010 Event: Receiver handler : Ready
+On: 2011-10-20 16:53:42.591041 Event: Start Call
+On: 2011-10-20 16:53:42.591095 Event: Waiting Feedback
+On: 2011-10-20 16:53:57.591251 Event: Test Failed
+
+
+------------------STARTED THE LOGGING 2011-10-20 16:54:46.996344 ------------------
+On: 2011-10-20 16:54:46.996422 Event: init Caller
+On: 2011-10-20 16:54:46.996445 Event: unisip
+On: 2011-10-20 16:54:49.001848 Event: Connected to Caller Handler
+On: 2011-10-20 16:54:49.002163 Event: Caller Handler respond
+On: 2011-10-20 16:54:49.002931 Event: Caller handler : Ready
+On: 2011-10-20 16:54:49.002970 Event: init Receiver
+On: 2011-10-20 16:54:49.002990 Event: GSMRZ3
+On: 2011-10-20 16:54:56.010295 Event: Connected to Receiver Handler
+On: 2011-10-20 16:54:56.018069 Event: Receiver Handler respond
+On: 2011-10-20 16:54:56.020319 Event: Receiver handler : Ready
+On: 2011-10-20 16:54:56.020356 Event: Start Call
+On: 2011-10-20 16:54:56.020485 Event: Waiting Feedback
+On: 2011-10-20 16:55:01.257597 Event: Test Succeed
+On: 2011-10-20 16:55:05.305019 Event:
+On: 2011-10-20 16:55:05.305080 Event: init Caller
+On: 2011-10-20 16:55:05.305100 Event: GSMRZ1
+On: 2011-10-20 16:55:07.310381 Event: Cannt connect to Caller
+On: 2011-10-20 16:55:07.310444 Event: 999 General Handler Error: Could not connect to Caller handler
+On: 2011-10-20 16:55:11.391619 Event:
+On: 2011-10-20 16:55:11.391682 Event: init Caller
+On: 2011-10-20 16:55:11.391702 Event: landline
+On: 2011-10-20 16:55:13.398189 Event: Connected to Caller Handler
+On: 2011-10-20 16:55:13.398480 Event: Caller Handler respond
+On: 2011-10-20 16:55:13.400951 Event: Caller handler : Ready
+On: 2011-10-20 16:55:13.400989 Event: init Receiver
+On: 2011-10-20 16:55:13.401009 Event: GSMRZ2
+On: 2011-10-20 16:55:20.406263 Event: Connected to Receiver Handler
+On: 2011-10-20 16:55:20.413525 Event: Receiver Handler respond
+On: 2011-10-20 16:55:20.416375 Event: Receiver handler : Ready
+On: 2011-10-20 16:55:20.416421 Event: Start Call
+On: 2011-10-20 16:55:20.416560 Event: Waiting Feedback
+On: 2011-10-20 16:55:28.916564 Event: Test Succeed
+On: 2011-10-20 16:55:32.956883 Event:
+On: 2011-10-20 16:55:32.956942 Event: init Caller
+On: 2011-10-20 16:55:32.956962 Event: sip
+On: 2011-10-20 16:55:34.961993 Event: Connected to Caller Handler
+On: 2011-10-20 16:55:34.962292 Event: Caller Handler respond
+On: 2011-10-20 16:55:34.963050 Event: Caller handler : Ready
+On: 2011-10-20 16:55:34.963088 Event: init Receiver
+On: 2011-10-20 16:55:34.963108 Event: GSMExt.O2
+On: 2011-10-20 16:55:36.968832 Event: Connected to Receiver Handler
+On: 2011-10-20 16:55:36.969119 Event: Receiver Handler respond
+On: 2011-10-20 16:55:36.969303 Event: Receiver handler : Ready
+On: 2011-10-20 16:55:36.969333 Event: Start Call
+On: 2011-10-20 16:55:36.969386 Event: Waiting Feedback
+On: 2011-10-20 16:55:51.969553 Event: Test Failed
+On: 2011-10-20 16:55:56.050154 Event:
+On: 2011-10-20 16:55:56.050217 Event: init Caller
+On: 2011-10-20 16:55:56.050237 Event: sip
+On: 2011-10-20 16:55:58.056673 Event: Connected to Caller Handler
+On: 2011-10-20 16:55:58.056966 Event: Caller Handler respond
+On: 2011-10-20 16:55:58.057776 Event: Caller handler : Ready
+On: 2011-10-20 16:55:58.057814 Event: init Receiver
+On: 2011-10-20 16:55:58.057834 Event: GSMExt.Tm
+On: 2011-10-20 16:56:00.062692 Event: Connected to Receiver Handler
+On: 2011-10-20 16:56:00.063054 Event: Receiver Handler respond
+On: 2011-10-20 16:56:00.063238 Event: Receiver handler : Ready
+On: 2011-10-20 16:56:00.063267 Event: Start Call
+On: 2011-10-20 16:56:00.063323 Event: Waiting Feedback
+On: 2011-10-20 16:56:15.063491 Event: Test Failed
+On: 2011-10-20 16:56:19.140852 Event:
+On: 2011-10-20 16:56:19.140917 Event: init Caller
+On: 2011-10-20 16:56:19.140937 Event: sip
+On: 2011-10-20 16:56:21.147286 Event: Connected to Caller Handler
+On: 2011-10-20 16:56:21.147676 Event: Caller Handler respond
+On: 2011-10-20 16:56:21.148450 Event: Caller handler : Ready
+On: 2011-10-20 16:56:21.148487 Event: init Receiver
+On: 2011-10-20 16:56:21.148508 Event: GSMExt.Voda
+On: 2011-10-20 16:56:23.153932 Event: Connected to Receiver Handler
+On: 2011-10-20 16:56:23.154221 Event: Receiver Handler respond
+On: 2011-10-20 16:56:23.154402 Event: Receiver handler : Ready
+On: 2011-10-20 16:56:23.154432 Event: Start Call
+On: 2011-10-20 16:56:23.154493 Event: Waiting Feedback
+On: 2011-10-20 16:56:38.154733 Event: Test Failed
+On: 2011-10-20 16:56:42.232832 Event:
+On: 2011-10-20 16:56:42.232894 Event: init Caller
+On: 2011-10-20 16:56:42.232914 Event: sip
+On: 2011-10-20 16:56:44.239436 Event: Connected to Caller Handler
+On: 2011-10-20 16:56:44.239732 Event: Caller Handler respond
+On: 2011-10-20 16:56:44.240515 Event: Caller handler : Ready
+On: 2011-10-20 16:56:44.240553 Event: init Receiver
+On: 2011-10-20 16:56:44.240574 Event: GSMExt.Eplus
+On: 2011-10-20 16:56:46.246093 Event: Connected to Receiver Handler
+On: 2011-10-20 16:56:46.246386 Event: Receiver Handler respond
+On: 2011-10-20 16:56:46.246567 Event: Receiver handler : Ready
+On: 2011-10-20 16:56:46.246597 Event: Start Call
+On: 2011-10-20 16:56:46.246648 Event: Waiting Feedback
+On: 2011-10-20 16:57:01.246812 Event: Test Failed
+
+
+------------------STARTED THE LOGGING 2011-10-20 17:38:59.698019 ------------------
+On: 2011-10-20 17:38:59.698103 Event: init Caller
+On: 2011-10-20 17:38:59.698125 Event: sip
+On: 2011-10-20 17:39:01.705916 Event: Cannt connect to Caller
+On: 2011-10-20 17:39:01.705978 Event: 999 General Handler Error: Could not connect to Caller handler
+On: 2011-10-20 17:39:05.854380 Event:
+On: 2011-10-20 17:39:05.854440 Event: init Caller
+On: 2011-10-20 17:39:05.854461 Event: sip
+On: 2011-10-20 17:39:07.864671 Event: Cannt connect to Caller
+On: 2011-10-20 17:39:07.864732 Event: 999 General Handler Error: Could not connect to Caller handler
+On: 2011-10-20 17:39:11.995344 Event:
+On: 2011-10-20 17:39:11.995404 Event: init Caller
+On: 2011-10-20 17:39:11.995424 Event: sip
+On: 2011-10-20 17:39:14.003271 Event: Connected to Caller Handler
+On: 2011-10-20 17:39:14.003561 Event: Caller Handler respond
+On: 2011-10-20 17:39:14.004336 Event: Caller handler : Ready
+On: 2011-10-20 17:39:14.004377 Event: init Receiver
+On: 2011-10-20 17:39:14.004399 Event: GSMRZ1
+On: 2011-10-20 17:39:16.009243 Event: Cannt connect to Receiver
+On: 2011-10-20 17:39:16.009302 Event: 998 General Handler Error: Could not connect Destination handler
+On: 2011-10-20 17:39:20.167436 Event:
+On: 2011-10-20 17:39:20.167492 Event: init Caller
+On: 2011-10-20 17:39:20.167513 Event: sip
+On: 2011-10-20 17:39:22.176614 Event: Cannt connect to Caller
+On: 2011-10-20 17:39:22.176675 Event: 999 General Handler Error: Could not connect to Caller handler
+On: 2011-10-20 17:39:26.322056 Event:
+On: 2011-10-20 17:39:26.322115 Event: init Caller
+On: 2011-10-20 17:39:26.322136 Event: sip
+On: 2011-10-20 17:39:28.330427 Event: Connected to Caller Handler
+On: 2011-10-20 17:39:28.330711 Event: Caller Handler respond
+On: 2011-10-20 17:39:28.331834 Event: Caller handler : Ready
+On: 2011-10-20 17:39:28.331873 Event: init Receiver
+On: 2011-10-20 17:39:28.331895 Event: GSMRZ1
+On: 2011-10-20 17:39:30.336654 Event: Cannt connect to Receiver
+On: 2011-10-20 17:39:30.336713 Event: 998 General Handler Error: Could not connect Destination handler
+On: 2011-10-20 17:39:34.506107 Event:
+On: 2011-10-20 17:39:34.506164 Event: init Caller
+On: 2011-10-20 17:39:34.506185 Event: sip
+On: 2011-10-20 17:39:36.516711 Event: Connected to Caller Handler
+On: 2011-10-20 17:39:36.517002 Event: Caller Handler respond
+On: 2011-10-20 17:39:36.517842 Event: Caller handler : Ready
+On: 2011-10-20 17:39:36.517881 Event: init Receiver
+On: 2011-10-20 17:39:36.517903 Event: GSMRZ1
+On: 2011-10-20 17:39:38.522391 Event: Cannt connect to Receiver
+On: 2011-10-20 17:39:38.522448 Event: 998 General Handler Error: Could not connect Destination handler
+On: 2011-10-20 17:39:42.687855 Event:
+On: 2011-10-20 17:39:42.687915 Event: init Caller
+On: 2011-10-20 17:39:42.687936 Event: sip
+On: 2011-10-20 17:39:44.694909 Event: Connected to Caller Handler
+On: 2011-10-20 17:39:44.695194 Event: Caller Handler respond
+On: 2011-10-20 17:39:44.695972 Event: Caller handler : Ready
+On: 2011-10-20 17:39:44.696006 Event: init Receiver
+On: 2011-10-20 17:39:44.696028 Event: GSMRZ1
+On: 2011-10-20 17:39:46.700779 Event: Cannt connect to Receiver
+On: 2011-10-20 17:39:46.700837 Event: 998 General Handler Error: Could not connect Destination handler
+On: 2011-10-20 17:39:50.853906 Event:
+On: 2011-10-20 17:39:50.853961 Event: init Caller
+On: 2011-10-20 17:39:50.853982 Event: sip
+On: 2011-10-20 17:39:52.864655 Event: Connected to Caller Handler
+On: 2011-10-20 17:39:52.864938 Event: Caller Handler respond
+On: 2011-10-20 17:39:52.866169 Event: Caller handler : Ready
+On: 2011-10-20 17:39:52.866208 Event: init Receiver
+On: 2011-10-20 17:39:52.866230 Event: GSMRZ1
+On: 2011-10-20 17:39:54.870523 Event: Cannt connect to Receiver
+On: 2011-10-20 17:39:54.870583 Event: 998 General Handler Error: Could not connect Destination handler
+On: 2011-10-20 17:39:59.022102 Event:
+On: 2011-10-20 17:39:59.022158 Event: init Caller
+On: 2011-10-20 17:39:59.022179 Event: sip
+On: 2011-10-20 17:40:01.029917 Event: Connected to Caller Handler
+On: 2011-10-20 17:40:01.030217 Event: Caller Handler respond
+On: 2011-10-20 17:40:01.031105 Event: Caller handler : Ready
+On: 2011-10-20 17:40:01.031145 Event: init Receiver
+On: 2011-10-20 17:40:01.031167 Event: GSMRZ1
+On: 2011-10-20 17:40:03.034383 Event: Cannt connect to Receiver
+On: 2011-10-20 17:40:03.034441 Event: 998 General Handler Error: Could not connect Destination handler
+On: 2011-10-20 17:40:07.195303 Event:
+On: 2011-10-20 17:40:07.195361 Event: init Caller
+On: 2011-10-20 17:40:07.195382 Event: sip
+On: 2011-10-20 17:40:09.200782 Event: Connected to Caller Handler
+On: 2011-10-20 17:40:09.202069 Event: Caller Handler respond
+On: 2011-10-20 17:40:09.202872 Event: Caller handler : Ready
+On: 2011-10-20 17:40:09.202911 Event: init Receiver
+On: 2011-10-20 17:40:09.202933 Event: GSMRZ1
+On: 2011-10-20 17:40:11.206977 Event: Cannt connect to Receiver
+On: 2011-10-20 17:40:11.207036 Event: 998 General Handler Error: Could not connect Destination handler
+
+
+------------------STARTED THE LOGGING 2011-10-20 17:42:01.266137 ------------------
+On: 2011-10-20 17:42:01.266213 Event: init Caller
+On: 2011-10-20 17:42:01.266236 Event: sip
+On: 2011-10-20 17:42:03.274382 Event: Connected to Caller Handler
+On: 2011-10-20 17:42:03.274669 Event: Caller Handler respond
+On: 2011-10-20 17:42:03.275806 Event: Caller handler : Ready
+On: 2011-10-20 17:42:03.275840 Event: init Receiver
+On: 2011-10-20 17:42:03.275861 Event: GSMRZ1
+On: 2011-10-20 17:42:05.284582 Event: Cannt connect to Receiver
+On: 2011-10-20 17:42:05.284641 Event: 998 General Handler Error: Could not connect Destination handler
+
+
+------------------STARTED THE LOGGING 2011-10-20 17:44:26.602128 ------------------
+On: 2011-10-20 17:44:26.602203 Event: init Caller
+On: 2011-10-20 17:44:26.602228 Event: unisip
+On: 2011-10-20 17:44:28.616835 Event: Cannt connect to Caller
+On: 2011-10-20 17:44:28.616899 Event: 999 General Handler Error: Could not connect to Caller handler
+On: 2011-10-20 17:44:32.755308 Event:
+On: 2011-10-20 17:44:32.755373 Event: init Caller
+On: 2011-10-20 17:44:32.755394 Event: GSMRZ2
+On: 2011-10-20 17:44:39.766500 Event: Cannt connect to Caller
+On: 2011-10-20 17:44:39.766558 Event: 999 General Handler Error: Could not connect to Caller handler
+On: 2011-10-20 17:44:43.885652 Event:
+On: 2011-10-20 17:44:43.885830 Event: init Caller
+On: 2011-10-20 17:44:43.885853 Event: GSMRZ1
+On: 2011-10-20 17:44:45.898432 Event: Cannt connect to Caller
+On: 2011-10-20 17:44:45.898494 Event: 999 General Handler Error: Could not connect to Caller handler
+On: 2011-10-20 17:44:50.034021 Event:
+On: 2011-10-20 17:44:50.034087 Event: init Caller
+On: 2011-10-20 17:44:50.034107 Event: GSMRZ3
+On: 2011-10-20 17:44:57.050517 Event: Cannt connect to Caller
+On: 2011-10-20 17:44:57.050580 Event: 999 General Handler Error: Could not connect to Caller handler
+On: 2011-10-20 17:45:01.162170 Event:
+On: 2011-10-20 17:45:01.162230 Event: init Caller
+On: 2011-10-20 17:45:01.162252 Event: GSMRZ2
+On: 2011-10-20 17:45:08.170521 Event: Cannt connect to Caller
+On: 2011-10-20 17:45:08.170582 Event: 999 General Handler Error: Could not connect to Caller handler
+On: 2011-10-20 17:45:12.302189 Event:
+On: 2011-10-20 17:45:12.302248 Event: init Caller
+On: 2011-10-20 17:45:12.302269 Event: GSMRZ1
+On: 2011-10-20 17:45:14.306395 Event: Cannt connect to Caller
+On: 2011-10-20 17:45:14.306457 Event: 999 General Handler Error: Could not connect to Caller handler
+
+
+------------------STARTED THE LOGGING 2011-10-20 17:47:16.610171 ------------------
+On: 2011-10-20 17:47:16.610245 Event: init Caller
+On: 2011-10-20 17:47:16.610267 Event: GSMRZ1
+On: 2011-10-20 17:47:18.617974 Event: Cannt connect to Caller
+On: 2011-10-20 17:47:18.618039 Event: 999 General Handler Error: Could not connect to Caller handler
+On: 2011-10-20 17:47:22.786130 Event:
+On: 2011-10-20 17:47:22.786191 Event: init Caller
+On: 2011-10-20 17:47:22.786211 Event: unisip
+On: 2011-10-20 17:47:24.796792 Event: Connected to Caller Handler
+On: 2011-10-20 17:47:24.797094 Event: Caller Handler respond
+On: 2011-10-20 17:47:24.797931 Event: Caller handler : Ready
+On: 2011-10-20 17:47:24.797969 Event: init Receiver
+On: 2011-10-20 17:47:24.797991 Event: GSMExt.Eplus
+On: 2011-10-20 17:47:26.802627 Event: Connected to Receiver Handler
+On: 2011-10-20 17:47:26.802907 Event: Receiver Handler respond
+On: 2011-10-20 17:47:26.803088 Event: Receiver handler : Ready
+On: 2011-10-20 17:47:26.803119 Event: Start Call
+On: 2011-10-20 17:47:26.803174 Event: Waiting Feedback
+On: 2011-10-20 17:47:56.803427 Event: Test Failed
+On: 2011-10-20 17:48:00.961952 Event:
+On: 2011-10-20 17:48:00.962013 Event: init Caller
+On: 2011-10-20 17:48:00.962032 Event: GSMRZ2
+On: 2011-10-20 17:48:07.970482 Event: Cannt connect to Caller
+On: 2011-10-20 17:48:07.970541 Event: 999 General Handler Error: Could not connect to Caller handler
+On: 2011-10-20 17:48:12.102182 Event:
+On: 2011-10-20 17:48:12.102247 Event: init Caller
+On: 2011-10-20 17:48:12.102266 Event: GSMRZ1
+On: 2011-10-20 17:48:14.107794 Event: Cannt connect to Caller
+On: 2011-10-20 17:48:14.107858 Event: 999 General Handler Error: Could not connect to Caller handler
+On: 2011-10-20 17:48:18.252327 Event:
+On: 2011-10-20 17:48:18.252387 Event: init Caller
+On: 2011-10-20 17:48:18.252407 Event: GSMRZ3
+On: 2011-10-20 17:48:25.262383 Event: Cannt connect to Caller
+On: 2011-10-20 17:48:25.262445 Event: 999 General Handler Error: Could not connect to Caller handler
+On: 2011-10-20 17:48:29.378185 Event:
+On: 2011-10-20 17:48:29.378244 Event: init Caller
+On: 2011-10-20 17:48:29.378264 Event: GSMRZ2
+On: 2011-10-20 17:48:36.386485 Event: Cannt connect to Caller
+On: 2011-10-20 17:48:36.386545 Event: 999 General Handler Error: Could not connect to Caller handler
+On: 2011-10-20 17:48:40.506145 Event:
+On: 2011-10-20 17:48:40.506206 Event: init Caller
+On: 2011-10-20 17:48:40.506225 Event: GSMRZ1
+On: 2011-10-20 17:48:42.518499 Event: Cannt connect to Caller
+On: 2011-10-20 17:48:42.518561 Event: 999 General Handler Error: Could not connect to Caller handler
+On: 2011-10-20 17:48:46.668503 Event:
+On: 2011-10-20 17:48:46.668561 Event: init Caller
+On: 2011-10-20 17:48:46.668581 Event: GSMRZ2
+On: 2011-10-20 17:48:53.682488 Event: Cannt connect to Caller
+On: 2011-10-20 17:48:53.682548 Event: 999 General Handler Error: Could not connect to Caller handler
+On: 2011-10-20 17:48:57.790121 Event:
+On: 2011-10-20 17:48:57.790175 Event: init Caller
+On: 2011-10-20 17:48:57.790194 Event: GSMRZ3
+On: 2011-10-20 17:49:04.802377 Event: Cannt connect to Caller
+On: 2011-10-20 17:49:04.802439 Event: 999 General Handler Error: Could not connect to Caller handler
+On: 2011-10-20 17:49:08.931537 Event:
+On: 2011-10-20 17:49:08.931599 Event: init Caller
+On: 2011-10-20 17:49:08.931618 Event: GSMRZ1
+On: 2011-10-20 17:49:10.940512 Event: Cannt connect to Caller
+On: 2011-10-20 17:49:10.940573 Event: 999 General Handler Error: Could not connect to Caller handler
+On: 2011-10-20 17:49:15.105996 Event:
+On: 2011-10-20 17:49:15.106060 Event: init Caller
+On: 2011-10-20 17:49:15.106081 Event: GSMRZ2
+On: 2011-10-20 17:49:22.114530 Event: Cannt connect to Caller
+On: 2011-10-20 17:49:22.114589 Event: 999 General Handler Error: Could not connect to Caller handler
+On: 2011-10-20 17:49:26.234121 Event:
+On: 2011-10-20 17:49:26.234184 Event: init Caller
+On: 2011-10-20 17:49:26.234203 Event: unisip
+On: 2011-10-20 17:49:28.250054 Event: Connected to Caller Handler
+On: 2011-10-20 17:49:28.250350 Event: Caller Handler respond
+On: 2011-10-20 17:49:28.251780 Event: Caller
+
+------------------STARTED THE LOGGING 2011-10-20 17:58:28.714049 ------------------
+On: 2011-10-20 17:58:28.714126 Event: init Caller
+On: 2011-10-20 17:58:28.714150 Event: GSMRZ2
+On: 2011-10-20 17:58:35.721632 Event: Connected to Caller Handler
+On: 2011-10-20 17:58:35.728995 Event: Caller Handler respond
+On: 2011-10-20 17:58:35.732132 Event: Caller handler : Ready
+On: 2011-10-20 17:58:35.732177 Event: init Receiver
+On: 2011-10-20 17:58:35.732200 Event: sip
+On: 2011-10-20 17:58:37.735314 Event: Connected to Receiver Handler
+On: 2011-10-20 17:58:37.735607 Event: Receiver Handler respond
+On: 2011-10-20 17:58:37.736364 Event: Receiver handler : Ready
+On: 2011-10-20 17:58:37.736403 Event: Start Call
+On: 2011-10-20 17:58:37.736674 Event: Waiting Feedback
+On: 2011-10-20 17:58:41.302001 Event: Test Succeed
+On: 2011-10-20 17:58:45.344905 Event:
+On: 2011-10-20 17:58:45.344966 Event: init Caller
+On: 2011-10-20 17:58:45.344987 Event: GSMRZ2
+On: 2011-10-20 17:58:52.353905 Event: Connected to Caller Handler
+On: 2011-10-20 17:58:52.361379 Event: Caller Handler respond
+On: 2011-10-20 17:58:52.364368 Event: Caller handler : Ready
+On: 2011-10-20 17:58:52.364413 Event: init Receiver
+On: 2011-10-20 17:58:52.364437 Event: sip
+On: 2011-10-20 17:58:54.369413 Event: Connected to Receiver Handler
+On: 2011-10-20 17:58:54.369737 Event: Receiver Handler respond
+On: 2011-10-20 17:58:54.370890 Event: Receiver handler : Ready
+On: 2011-10-20 17:58:54.370928 Event: Start Call
+On: 2011-10-20 17:58:54.371090 Event: Waiting Feedback
+On: 2011-10-20 17:58:57.810721 Event: Test Succeed
+
+
+------------------STARTED THE LOGGING 2011-10-20 18:03:02.639837 ------------------
+On: 2011-10-20 18:03:02.639913 Event: init Caller
+On: 2011-10-20 18:03:02.639937 Event: GSMRZ2
+On: 2011-10-20 18:03:09.646446 Event: Connected to Caller Handler
+On: 2011-10-20 18:03:09.653100 Event: Caller Handler respond
+On: 2011-10-20 18:03:09.655464 Event: Caller handler : Ready
+On: 2011-10-20 18:03:09.655504 Event: init Receiver
+On: 2011-10-20 18:03:09.655527 Event: sip
+On: 2011-10-20 18:03:11.659645 Event: Connected to Receiver Handler
+On: 2011-10-20 18:03:11.660781 Event: Receiver Handler respond
+On: 2011-10-20 18:03:11.661561 Event: Receiver handler : Ready
+On: 2011-10-20 18:03:11.661600 Event: Start Call
+On: 2011-10-20 18:03:11.661927 Event: Waiting Feedback
+On: 2011-10-20 18:03:15.064113 Event: Test Succeed
+
+
+------------------STARTED THE LOGGING 2011-10-20 18:06:14.603221 ------------------
+On: 2011-10-20 18:06:14.603297 Event: init Caller
+On: 2011-10-20 18:06:14.603321 Event: sip
+On: 2011-10-20 18:06:16.608623 Event: Connected to Caller Handler
+On: 2011-10-20 18:06:16.609026 Event: Caller Handler respond
+On: 2011-10-20 18:06:16.609954 Event: Caller handler : Ready
+On: 2011-10-20 18:06:16.610009 Event: init Receiver
+On: 2011-10-20 18:06:16.610032 Event: GSMRZ1
+On: 2011-10-20 18:06:18.614479 Event: Cannt connect to Receiver
+On: 2011-10-20 18:06:18.614542 Event: 998 General Handler Error: Could not connect Destination handler
+
+
+------------------STARTED THE LOGGING 2011-10-20 18:06:58.768491 ------------------
+On: 2011-10-20 18:06:58.768567 Event: init Caller
+On: 2011-10-20 18:06:58.768590 Event: GSMRZ2
+On: 2011-10-20 18:07:05.778547 Event: Connected to Caller Handler
+On: 2011-10-20 18:07:05.786694 Event: Caller Handler respond
+On: 2011-10-20 18:07:05.788954 Event: Caller handler : Ready
+On: 2011-10-20 18:07:05.788989 Event: init Receiver
+On: 2011-10-20 18:07:05.789012 Event: sip
+On: 2011-10-20 18:07:07.793828 Event: Connected to Receiver Handler
+On: 2011-10-20 18:07:07.794220 Event: Receiver Handler respond
+On: 2011-10-20 18:07:07.795345 Event: Receiver handler : Ready
+On: 2011-10-20 18:07:07.795385 Event: Start Call
+On: 2011-10-20 18:07:07.795552 Event: Waiting Feedback
+On: 2011-10-20 18:07:11.238744 Event: Test Succeed
diff --git a/For Weekly Test/tricode/University SIP handler.log b/For Weekly Test/tricode/University SIP handler.log
new file mode 100644
index 0000000..5bbb5c0
--- /dev/null
+++ b/For Weekly Test/tricode/University SIP handler.log
@@ -0,0 +1,595 @@
+
+
+------------------STARTED THE LOGGING 2011-10-14 17:09:20.463772 ------------------
+On: 2011-10-14 17:09:20.484808 Event: try to Connect to Controller
+On: 2011-10-14 17:09:21.787092 Event: init state
+On: 2011-10-14 17:09:21.787333 Event: Register Account to SIP server
+On: 2011-10-14 17:09:21.787760 Event: 100
+On: 2011-10-14 17:09:21.787849 Event: Caller Handler Ready
+On: 2011-10-14 17:09:23.798322 Event: Terminate
+On: 2011-10-14 17:09:23.798362 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-14 17:54:19.746950 ------------------
+On: 2011-10-14 17:54:19.768161 Event: try to Connect to Controller
+On: 2011-10-14 17:54:21.059772 Event: init state
+On: 2011-10-14 17:54:21.060003 Event: Register Account to SIP server
+On: 2011-10-14 17:54:21.060427 Event: 100
+On: 2011-10-14 17:54:21.060512 Event: Caller Handler Ready
+On: 2011-10-14 17:54:25.066805 Event: Terminate
+On: 2011-10-14 17:54:25.066845 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-14 17:56:10.607489 ------------------
+On: 2011-10-14 17:56:10.628235 Event: try to Connect to Controller
+On: 2011-10-14 17:56:11.929022 Event: init state
+On: 2011-10-14 17:56:11.929259 Event: Register Account to SIP server
+On: 2011-10-14 17:56:11.929679 Event: 100
+On: 2011-10-14 17:56:11.929765 Event: Caller Handler Ready
+On: 2011-10-14 17:56:13.938277 Event: Terminate
+On: 2011-10-14 17:56:13.938318 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-14 17:58:30.100094 ------------------
+On: 2011-10-14 17:58:30.121441 Event: try to Connect to Controller
+On: 2011-10-14 17:58:31.415093 Event: init state
+On: 2011-10-14 17:58:31.415334 Event: Register Account to SIP server
+On: 2011-10-14 17:58:31.415757 Event: 100
+On: 2011-10-14 17:58:31.415843 Event: Caller Handler Ready
+On: 2011-10-14 17:58:35.422237 Event: Terminate
+On: 2011-10-14 17:58:35.422278 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-14 19:02:09.612616 ------------------
+On: 2011-10-14 19:02:09.635232 Event: try to Connect to Controller
+On: 2011-10-14 19:02:10.880521 Event: init state
+On: 2011-10-14 19:02:10.880760 Event: Register Account to SIP server
+On: 2011-10-14 19:02:10.881541 Event: 100
+On: 2011-10-14 19:02:10.881628 Event: Caller Handler Ready
+On: 2011-10-14 19:02:14.888860 Event: Terminate
+On: 2011-10-14 19:02:14.888899 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-14 19:02:36.840163 ------------------
+On: 2011-10-14 19:02:36.862417 Event: try to Connect to Controller
+On: 2011-10-14 19:02:38.099450 Event: init state
+On: 2011-10-14 19:02:38.099733 Event: Register Account to SIP server
+On: 2011-10-14 19:02:38.100154 Event: 100
+On: 2011-10-14 19:02:38.100240 Event: Caller Handler Ready
+On: 2011-10-14 19:02:45.119551 Event: CALL START
+On: 2011-10-14 19:02:45.119610 Event: Make a call to: 4661447
+On: 2011-10-14 19:02:45.214411 Event: Number busy or Offline
+On: 2011-10-14 19:02:45.214522 Event: CALL NOT OK
+On: 2011-10-14 19:02:45.214582 Event: Call Disconnected
+On: 2011-10-14 19:02:58.118120 Event: Terminate
+On: 2011-10-14 19:02:58.118170 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-14 19:03:14.777585 ------------------
+On: 2011-10-14 19:03:14.798150 Event: try to Connect to Controller
+On: 2011-10-14 19:03:16.046161 Event: init state
+On: 2011-10-14 19:03:16.046397 Event: Register Account to SIP server
+On: 2011-10-14 19:03:16.047165 Event: 100
+On: 2011-10-14 19:03:16.047251 Event: Caller Handler Ready
+On: 2011-10-14 19:03:23.065159 Event: CALL START
+On: 2011-10-14 19:03:23.065219 Event: Make a call to: 4661447
+On: 2011-10-14 19:03:23.145000 Event: Number busy or Offline
+On: 2011-10-14 19:03:23.145107 Event: CALL NOT OK
+On: 2011-10-14 19:03:23.145167 Event: Call Disconnected
+On: 2011-10-14 19:03:36.063802 Event: Terminate
+On: 2011-10-14 19:03:36.063852 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-14 19:13:41.178313 ------------------
+On: 2011-10-14 19:13:41.198922 Event: try to Connect to Controller
+On: 2011-10-14 19:13:42.505494 Event: init state
+On: 2011-10-14 19:13:42.505769 Event: Register Account to SIP server
+On: 2011-10-14 19:13:42.506544 Event: 100
+On: 2011-10-14 19:13:42.506632 Event: Caller Handler Ready
+On: 2011-10-14 19:13:46.529301 Event: Terminate
+On: 2011-10-14 19:13:46.529343 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-14 19:16:38.322077 ------------------
+On: 2011-10-14 19:16:38.342236 Event: try to Connect to Controller
+On: 2011-10-14 19:16:39.678791 Event: init state
+On: 2011-10-14 19:16:39.679031 Event: Register Account to SIP server
+On: 2011-10-14 19:16:39.679455 Event: 100
+On: 2011-10-14 19:16:39.679540 Event: Caller Handler Ready
+On: 2011-10-14 19:16:41.690034 Event: Terminate
+On: 2011-10-14 19:16:41.690076 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-17 16:52:11.399757 ------------------
+On: 2011-10-17 16:52:11.420389 Event: try to Connect to Controller
+On: 2011-10-17 16:52:12.666407 Event: init state
+On: 2011-10-17 16:52:12.666634 Event: Register Account to SIP server
+On: 2011-10-17 16:52:12.667048 Event: 100
+On: 2011-10-17 16:52:12.667133 Event: Receiver Handler Ready
+On: 2011-10-17 16:52:12.667475 Event: RECEIVE START
+On: 2011-10-17 16:52:15.720061 Event: {Call "mpselftest1" <sip:4661928@132.230.252.228>}
+On: 2011-10-17 16:52:15.720927 Event: Call Connecting
+On: 2011-10-17 16:52:15.720977 Event: 200
+On: 2011-10-17 16:52:15.721225 Event: Answer call
+On: 2011-10-17 16:52:15.721277 Event: Hangup call
+On: 2011-10-17 16:52:15.721647 Event: CALL OK
+On: 2011-10-17 16:52:15.822848 Event: Call Disconnected
+On: 2011-10-17 16:52:16.721855 Event: Terminate
+On: 2011-10-17 16:52:16.721898 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-17 17:15:26.258167 ------------------
+On: 2011-10-17 17:15:26.278319 Event: try to Connect to Controller
+On: 2011-10-17 17:15:27.596073 Event: init state
+On: 2011-10-17 17:15:27.596314 Event: Register Account to SIP server
+On: 2011-10-17 17:15:27.596730 Event: 100
+On: 2011-10-17 17:15:27.596816 Event: Caller Handler Ready
+On: 2011-10-17 17:15:32.608564 Event: CALL START
+On: 2011-10-17 17:15:32.608624 Event: Make a call to: 4661449
+On: 2011-10-17 17:15:32.680858 Event: Number busy or Offline
+On: 2011-10-17 17:15:32.680961 Event: CALL NOT OK
+On: 2011-10-17 17:15:32.681022 Event: Call Disconnected
+On: 2011-10-17 17:15:45.604531 Event: Terminate
+On: 2011-10-17 17:15:45.604575 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-17 17:29:39.716072 ------------------
+On: 2011-10-17 17:29:39.737029 Event: try to Connect to Controller
+On: 2011-10-17 17:29:41.041773 Event: init state
+On: 2011-10-17 17:29:41.042019 Event: Register Account to SIP server
+On: 2011-10-17 17:29:41.042447 Event: 100
+On: 2011-10-17 17:29:41.042535 Event: Caller Handler Ready
+On: 2011-10-17 17:29:59.201337 Event: Terminate
+On: 2011-10-17 17:29:59.201378 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-17 17:37:44.064925 ------------------
+On: 2011-10-17 17:37:44.087528 Event: try to Connect to Controller
+On: 2011-10-17 17:37:45.388397 Event: init state
+On: 2011-10-17 17:37:45.388638 Event: Register Account to SIP server
+On: 2011-10-17 17:37:45.389426 Event: 100
+On: 2011-10-17 17:37:45.389712 Event: Caller Handler Ready
+On: 2011-10-17 17:38:07.489481 Event: CALL START
+On: 2011-10-17 17:38:07.489559 Event: Make a call to: 4661455
+On: 2011-10-17 17:38:07.547960 Event: Number busy or Offline
+On: 2011-10-17 17:38:07.548065 Event: CALL NOT OK
+On: 2011-10-17 17:38:07.548126 Event: Call Disconnected
+On: 2011-10-17 17:38:20.489171 Event: Terminate
+On: 2011-10-17 17:38:20.489230 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-17 17:46:33.990113 ------------------
+On: 2011-10-17 17:46:34.010719 Event: try to Connect to Controller
+On: 2011-10-17 17:46:35.311714 Event: init state
+On: 2011-10-17 17:46:35.311956 Event: Register Account to SIP server
+On: 2011-10-17 17:46:35.312383 Event: 100
+On: 2011-10-17 17:46:35.312468 Event: Caller Handler Ready
+On: 2011-10-17 17:46:39.320140 Event: Terminate
+On: 2011-10-17 17:46:39.320179 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-17 18:02:39.179336 ------------------
+On: 2011-10-17 18:02:39.199551 Event: try to Connect to Controller
+On: 2011-10-17 18:02:40.511272 Event: init state
+On: 2011-10-17 18:02:40.511520 Event: Register Account to SIP server
+On: 2011-10-17 18:02:40.511939 Event: 100
+On: 2011-10-17 18:02:40.512028 Event: Caller Handler Ready
+On: 2011-10-17 18:02:45.524679 Event: CALL START
+On: 2011-10-17 18:02:45.524735 Event: Make a call to: 4661449
+On: 2011-10-17 18:02:45.601259 Event: Number busy or Offline
+On: 2011-10-17 18:02:45.601362 Event: CALL NOT OK
+On: 2011-10-17 18:02:45.601423 Event: Call Disconnected
+On: 2011-10-17 18:02:58.519835 Event: Terminate
+On: 2011-10-17 18:02:58.519878 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-17 18:09:37.195146 ------------------
+On: 2011-10-17 18:09:37.215474 Event: try to Connect to Controller
+On: 2011-10-17 18:09:38.514215 Event: init state
+On: 2011-10-17 18:09:38.514454 Event: Register Account to SIP server
+On: 2011-10-17 18:09:38.514876 Event: 100
+On: 2011-10-17 18:09:38.514964 Event: Caller Handler Ready
+On: 2011-10-17 18:09:42.522476 Event: Terminate
+On: 2011-10-17 18:09:42.522518 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 12:27:56.695383 ------------------
+On: 2011-10-20 12:27:56.715645 Event: try to Connect to Controller
+On: 2011-10-20 12:27:57.966095 Event: init state
+On: 2011-10-20 12:27:57.966351 Event: Register Account to SIP server
+On: 2011-10-20 12:27:57.967133 Event: 100
+On: 2011-10-20 12:27:57.967220 Event: Caller Handler Ready
+On: 2011-10-20 12:28:02.975299 Event: CALL START
+On: 2011-10-20 12:28:02.975354 Event: Make a call to: 4661449
+On: 2011-10-20 12:28:03.214760 Event: Number busy or Offline
+On: 2011-10-20 12:28:03.214857 Event: CALL NOT OK
+On: 2011-10-20 12:28:03.214918 Event: Call Disconnected
+On: 2011-10-20 12:28:14.973867 Event: Terminate
+On: 2011-10-20 12:28:14.973926 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 12:30:03.404722 ------------------
+On: 2011-10-20 12:30:03.425184 Event: try to Connect to Controller
+On: 2011-10-20 12:30:04.725895 Event: init state
+On: 2011-10-20 12:30:04.726141 Event: Register Account to SIP server
+On: 2011-10-20 12:30:04.726904 Event: 100
+On: 2011-10-20 12:30:04.726990 Event: Caller Handler Ready
+On: 2011-10-20 12:30:14.745741 Event: CALL START
+On: 2011-10-20 12:30:14.745803 Event: Make a call to: 4661447
+On: 2011-10-20 12:30:14.845066 Event: Number busy or Offline
+On: 2011-10-20 12:30:14.845175 Event: CALL NOT OK
+On: 2011-10-20 12:30:14.845238 Event: Call Disconnected
+On: 2011-10-20 12:30:26.746474 Event: Terminate
+On: 2011-10-20 12:30:26.746531 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 12:41:11.542884 ------------------
+On: 2011-10-20 12:41:11.605023 Event: try to Connect to Controller
+On: 2011-10-20 12:41:12.177901 Event: init state
+On: 2011-10-20 12:41:12.178195 Event: Register Account to SIP server
+On: 2011-10-20 12:41:12.179008 Event: 100
+On: 2011-10-20 12:41:12.179090 Event: Caller Handler Ready
+On: 2011-10-20 12:41:22.201238 Event: CALL START
+On: 2011-10-20 12:41:22.201297 Event: Make a call to: 4661455
+On: 2011-10-20 12:41:22.256105 Event: Number busy or Offline
+On: 2011-10-20 12:41:22.256210 Event: CALL NOT OK
+On: 2011-10-20 12:41:22.256271 Event: Call Disconnected
+On: 2011-10-20 12:41:34.198684 Event: Terminate
+On: 2011-10-20 12:41:34.198730 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 12:48:50.545230 ------------------
+On: 2011-10-20 12:48:50.565974 Event: try to Connect to Controller
+On: 2011-10-20 12:48:51.855695 Event: init state
+On: 2011-10-20 12:48:51.855951 Event: Register Account to SIP server
+On: 2011-10-20 12:48:51.856370 Event: 100
+On: 2011-10-20 12:48:51.856456 Event: Caller Handler Ready
+On: 2011-10-20 12:49:01.880839 Event: CALL START
+On: 2011-10-20 12:49:01.880884 Event: Make a call to: 4661455
+On: 2011-10-20 12:49:01.938198 Event: Number busy or Offline
+On: 2011-10-20 12:49:01.938302 Event: CALL NOT OK
+On: 2011-10-20 12:49:01.938362 Event: Call Disconnected
+On: 2011-10-20 12:49:13.878212 Event: Terminate
+On: 2011-10-20 12:49:13.878257 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 12:55:31.808866 ------------------
+On: 2011-10-20 12:55:31.829989 Event: try to Connect to Controller
+On: 2011-10-20 12:55:33.148979 Event: init state
+On: 2011-10-20 12:55:33.149227 Event: Register Account to SIP server
+On: 2011-10-20 12:55:33.149638 Event: 100
+On: 2011-10-20 12:55:33.150705 Event: Caller Handler Ready
+On: 2011-10-20 12:55:38.160831 Event: CALL START
+On: 2011-10-20 12:55:38.160890 Event: Make a call to: 4661449
+On: 2011-10-20 12:55:38.227996 Event: Number busy or Offline
+On: 2011-10-20 12:55:38.228102 Event: CALL NOT OK
+On: 2011-10-20 12:55:38.228163 Event: Call Disconnected
+On: 2011-10-20 12:55:50.155718 Event: Terminate
+On: 2011-10-20 12:55:50.155760 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 13:04:48.648303 ------------------
+On: 2011-10-20 13:04:48.668858 Event: try to Connect to Controller
+On: 2011-10-20 13:04:49.969172 Event: init state
+On: 2011-10-20 13:04:49.969431 Event: Register Account to SIP server
+On: 2011-10-20 13:04:49.970412 Event: 100
+On: 2011-10-20 13:04:49.970513 Event: Caller Handler Ready
+On: 2011-10-20 13:04:59.993027 Event: CALL START
+On: 2011-10-20 13:04:59.993085 Event: Make a call to: 4661447
+On: 2011-10-20 13:05:00.084809 Event: Number busy or Offline
+On: 2011-10-20 13:05:00.084913 Event: CALL NOT OK
+On: 2011-10-20 13:05:00.084974 Event: Call Disconnected
+On: 2011-10-20 13:05:11.990436 Event: Terminate
+On: 2011-10-20 13:05:11.990482 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 13:15:51.539774 ------------------
+On: 2011-10-20 13:15:51.560375 Event: try to Connect to Controller
+On: 2011-10-20 13:15:52.876340 Event: init state
+On: 2011-10-20 13:15:52.876587 Event: Register Account to SIP server
+On: 2011-10-20 13:15:52.877007 Event: 100
+On: 2011-10-20 13:15:52.877092 Event: Caller Handler Ready
+On: 2011-10-20 13:15:57.888818 Event: CALL START
+On: 2011-10-20 13:15:57.888873 Event: Make a call to: 4661449
+On: 2011-10-20 13:15:57.957429 Event: Number busy or Offline
+On: 2011-10-20 13:15:57.957533 Event: CALL NOT OK
+On: 2011-10-20 13:15:57.957593 Event: Call Disconnected
+On: 2011-10-20 13:16:09.882641 Event: Terminate
+On: 2011-10-20 13:16:09.882683 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 13:33:35.254891 ------------------
+On: 2011-10-20 13:33:35.274979 Event: try to Connect to Controller
+On: 2011-10-20 13:33:36.589124 Event: init state
+On: 2011-10-20 13:33:36.589352 Event: Register Account to SIP server
+On: 2011-10-20 13:33:36.589972 Event: 100
+On: 2011-10-20 13:33:36.590073 Event: Caller Handler Ready
+On: 2011-10-20 13:33:46.609582 Event: CALL START
+On: 2011-10-20 13:33:46.609639 Event: Make a call to: 4661455
+On: 2011-10-20 13:33:46.689384 Event: Number busy or Offline
+On: 2011-10-20 13:33:46.689491 Event: CALL NOT OK
+On: 2011-10-20 13:33:46.689551 Event: Call Disconnected
+On: 2011-10-20 13:33:58.607656 Event: Terminate
+On: 2011-10-20 13:33:58.607714 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 13:51:31.916018 ------------------
+On: 2011-10-20 13:51:31.936621 Event: try to Connect to Controller
+On: 2011-10-20 13:51:33.091875 Event: init state
+On: 2011-10-20 13:51:33.092116 Event: Register Account to SIP server
+On: 2011-10-20 13:51:33.092538 Event: 100
+On: 2011-10-20 13:51:33.092625 Event: Caller Handler Ready
+On: 2011-10-20 13:51:43.111356 Event: CALL START
+On: 2011-10-20 13:51:43.111411 Event: Make a call to: 4661447
+On: 2011-10-20 13:51:43.197624 Event: Number busy or Offline
+On: 2011-10-20 13:51:43.197782 Event: CALL NOT OK
+On: 2011-10-20 13:51:43.197854 Event: Call Disconnected
+On: 2011-10-20 13:51:55.109101 Event: Terminate
+On: 2011-10-20 13:51:55.109156 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:01:40.704703 ------------------
+On: 2011-10-20 14:01:40.725475 Event: try to Connect to Controller
+On: 2011-10-20 14:01:42.034925 Event: init state
+On: 2011-10-20 14:01:42.035163 Event: Register Account to SIP server
+On: 2011-10-20 14:01:42.035585 Event: 100
+On: 2011-10-20 14:01:42.035669 Event: Caller Handler Ready
+On: 2011-10-20 14:01:47.048822 Event: CALL START
+On: 2011-10-20 14:01:47.048877 Event: Make a call to: 4661449
+On: 2011-10-20 14:01:47.124585 Event: Number busy or Offline
+On: 2011-10-20 14:01:47.124688 Event: CALL NOT OK
+On: 2011-10-20 14:01:47.124749 Event: Call Disconnected
+On: 2011-10-20 14:01:59.042313 Event: Terminate
+On: 2011-10-20 14:01:59.042358 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:09:01.663717 ------------------
+On: 2011-10-20 14:09:01.683988 Event: try to Connect to Controller
+On: 2011-10-20 14:09:03.002619 Event: init state
+On: 2011-10-20 14:09:03.002863 Event: Register Account to SIP server
+On: 2011-10-20 14:09:03.003289 Event: 100
+On: 2011-10-20 14:09:03.003376 Event: Caller Handler Ready
+On: 2011-10-20 14:09:08.016800 Event: CALL START
+On: 2011-10-20 14:09:08.016855 Event: Make a call to: 4661449
+On: 2011-10-20 14:09:09.770914 Event: Call Connecting
+On: 2011-10-20 14:09:09.770959 Event: 200
+On: 2011-10-20 14:09:09.998229 Event: Terminate
+On: 2011-10-20 14:09:09.998271 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:14:44.358042 ------------------
+On: 2011-10-20 14:14:44.378073 Event: try to Connect to Controller
+On: 2011-10-20 14:14:45.691040 Event: init state
+On: 2011-10-20 14:14:45.691271 Event: Register Account to SIP server
+On: 2011-10-20 14:14:45.691684 Event: 100
+On: 2011-10-20 14:14:45.691769 Event: Caller Handler Ready
+On: 2011-10-20 14:14:50.704922 Event: CALL START
+On: 2011-10-20 14:14:50.704977 Event: Make a call to: 4661449
+On: 2011-10-20 14:14:53.386248 Event: Call Connecting
+On: 2011-10-20 14:14:53.386293 Event: 200
+On: 2011-10-20 14:14:53.686188 Event: Terminate
+On: 2011-10-20 14:14:53.686228 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:20:11.802214 ------------------
+On: 2011-10-20 14:20:11.822819 Event: try to Connect to Controller
+On: 2011-10-20 14:20:13.097889 Event: init state
+On: 2011-10-20 14:20:13.098155 Event: Register Account to SIP server
+On: 2011-10-20 14:20:13.098574 Event: 100
+On: 2011-10-20 14:20:13.098656 Event: Caller Handler Ready
+On: 2011-10-20 14:20:23.119643 Event: CALL START
+On: 2011-10-20 14:20:23.119701 Event: Make a call to: 4661455
+On: 2011-10-20 14:20:24.826556 Event: Call Connecting
+On: 2011-10-20 14:20:24.826617 Event: 200
+On: 2011-10-20 14:20:25.023821 Event: Terminate
+On: 2011-10-20 14:20:25.023878 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:25:12.542124 ------------------
+On: 2011-10-20 14:25:12.562752 Event: try to Connect to Controller
+On: 2011-10-20 14:25:13.860033 Event: init state
+On: 2011-10-20 14:25:13.860271 Event: Register Account to SIP server
+On: 2011-10-20 14:25:13.860692 Event: 100
+On: 2011-10-20 14:25:13.860779 Event: Caller Handler Ready
+On: 2011-10-20 14:25:23.876941 Event: CALL START
+On: 2011-10-20 14:25:23.876999 Event: Make a call to: 4661455
+On: 2011-10-20 14:25:26.128928 Event: Call Connecting
+On: 2011-10-20 14:25:26.128975 Event: 200
+On: 2011-10-20 14:25:26.356232 Event: Terminate
+On: 2011-10-20 14:25:26.356289 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:32:14.268211 ------------------
+On: 2011-10-20 14:32:14.288708 Event: try to Connect to Controller
+On: 2011-10-20 14:32:15.599261 Event: init state
+On: 2011-10-20 14:32:15.599507 Event: Register Account to SIP server
+On: 2011-10-20 14:32:15.600290 Event: 100
+On: 2011-10-20 14:32:15.600378 Event: Caller Handler Ready
+On: 2011-10-20 14:32:20.612960 Event: CALL START
+On: 2011-10-20 14:32:20.613013 Event: Make a call to: 4661449
+On: 2011-10-20 14:32:23.963758 Event: Call Connecting
+On: 2011-10-20 14:32:23.963806 Event: 200
+On: 2011-10-20 14:32:24.186230 Event: Terminate
+On: 2011-10-20 14:32:24.186273 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:38:54.146517 ------------------
+On: 2011-10-20 14:38:54.169425 Event: try to Connect to Controller
+On: 2011-10-20 14:38:55.443987 Event: init state
+On: 2011-10-20 14:38:55.444237 Event: Register Account to SIP server
+On: 2011-10-20 14:38:55.444646 Event: 100
+On: 2011-10-20 14:38:55.444731 Event: Caller Handler Ready
+On: 2011-10-20 14:39:05.463992 Event: CALL START
+On: 2011-10-20 14:39:05.464050 Event: Make a call to: 4661455
+On: 2011-10-20 14:39:07.637906 Event: Call Connecting
+On: 2011-10-20 14:39:07.637954 Event: 200
+On: 2011-10-20 14:39:07.850769 Event: Terminate
+On: 2011-10-20 14:39:07.850829 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 14:55:30.694502 ------------------
+On: 2011-10-20 14:55:30.714845 Event: try to Connect to Controller
+On: 2011-10-20 14:55:32.022984 Event: init state
+On: 2011-10-20 14:55:32.023222 Event: Register Account to SIP server
+On: 2011-10-20 14:55:32.024001 Event: 100
+On: 2011-10-20 14:55:32.024084 Event: Caller Handler Ready
+On: 2011-10-20 14:55:42.047699 Event: CALL START
+On: 2011-10-20 14:55:42.047758 Event: Make a call to: 4661455
+On: 2011-10-20 14:55:44.073497 Event: Call Connecting
+On: 2011-10-20 14:55:44.073545 Event: 200
+On: 2011-10-20 14:55:44.266711 Event: Terminate
+On: 2011-10-20 14:55:44.266769 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 15:00:10.244175 ------------------
+On: 2011-10-20 15:00:10.264816 Event: try to Connect to Controller
+On: 2011-10-20 15:00:11.578767 Event: init state
+On: 2011-10-20 15:00:11.579009 Event: Register Account to SIP server
+On: 2011-10-20 15:00:11.579432 Event: 100
+On: 2011-10-20 15:00:11.579521 Event: Caller Handler Ready
+On: 2011-10-20 15:00:16.592904 Event: CALL START
+On: 2011-10-20 15:00:16.592955 Event: Make a call to: 4661449
+On: 2011-10-20 15:00:18.761660 Event: Call Connecting
+On: 2011-10-20 15:00:18.761735 Event: 200
+On: 2011-10-20 15:00:18.994204 Event: Terminate
+On: 2011-10-20 15:00:18.994247 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 15:16:18.392826 ------------------
+On: 2011-10-20 15:16:18.413151 Event: try to Connect to Controller
+On: 2011-10-20 15:16:19.723029 Event: init state
+On: 2011-10-20 15:16:19.723273 Event: Register Account to SIP server
+On: 2011-10-20 15:16:19.724050 Event: 100
+On: 2011-10-20 15:16:19.724134 Event: Caller Handler Ready
+On: 2011-10-20 15:16:21.731058 Event: Terminate
+On: 2011-10-20 15:16:21.731099 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 15:23:20.799299 ------------------
+On: 2011-10-20 15:23:20.829401 Event: try to Connect to Controller
+On: 2011-10-20 15:23:22.133378 Event: init state
+On: 2011-10-20 15:23:22.133618 Event: Register Account to SIP server
+On: 2011-10-20 15:23:22.134073 Event: 100
+On: 2011-10-20 15:23:22.134158 Event: Caller Handler Ready
+On: 2011-10-20 15:23:32.155822 Event: CALL START
+On: 2011-10-20 15:23:32.155894 Event: Make a call to: 4661455
+On: 2011-10-20 15:23:34.169204 Event: Call Connecting
+On: 2011-10-20 15:23:34.169255 Event: 200
+On: 2011-10-20 15:23:34.350980 Event: Terminate
+On: 2011-10-20 15:23:34.351037 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 16:02:46.594696 ------------------
+On: 2011-10-20 16:02:46.615504 Event: try to Connect to Controller
+On: 2011-10-20 16:02:47.897691 Event: init state
+On: 2011-10-20 16:02:47.897997 Event: Register Account to SIP server
+On: 2011-10-20 16:02:47.898443 Event: 100
+On: 2011-10-20 16:02:47.898534 Event: Caller Handler Ready
+On: 2011-10-20 16:02:57.921058 Event: CALL START
+On: 2011-10-20 16:02:57.921118 Event: Make a call to: 4661455
+On: 2011-10-20 16:02:59.775096 Event: Call Connecting
+On: 2011-10-20 16:02:59.775185 Event: 200
+On: 2011-10-20 16:03:00.009781 Event: Terminate
+On: 2011-10-20 16:03:00.009829 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 16:07:07.762214 ------------------
+On: 2011-10-20 16:07:07.784429 Event: try to Connect to Controller
+On: 2011-10-20 16:07:09.047040 Event: init state
+On: 2011-10-20 16:07:09.047280 Event: Register Account to SIP server
+On: 2011-10-20 16:07:09.047698 Event: 100
+On: 2011-10-20 16:07:09.047784 Event: Caller Handler Ready
+On: 2011-10-20 16:07:19.073727 Event: CALL START
+On: 2011-10-20 16:07:19.073786 Event: Make a call to: 4661455
+On: 2011-10-20 16:07:21.051163 Event: Call Connecting
+On: 2011-10-20 16:07:21.051212 Event: 200
+On: 2011-10-20 16:07:21.263128 Event: Terminate
+On: 2011-10-20 16:07:21.263186 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 16:13:18.569013 ------------------
+On: 2011-10-20 16:13:18.590008 Event: try to Connect to Controller
+On: 2011-10-20 16:13:19.885842 Event: init state
+On: 2011-10-20 16:13:19.886082 Event: Register Account to SIP server
+On: 2011-10-20 16:13:19.886506 Event: 100
+On: 2011-10-20 16:13:19.886590 Event: Caller Handler Ready
+On: 2011-10-20 16:13:29.905735 Event: CALL START
+On: 2011-10-20 16:13:29.905794 Event: Make a call to: 4661447
+On: 2011-10-20 16:13:32.050076 Event: Call Connecting
+On: 2011-10-20 16:13:32.050126 Event: 200
+On: 2011-10-20 16:13:32.216576 Event: Terminate
+On: 2011-10-20 16:13:32.216634 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 16:17:02.499628 ------------------
+On: 2011-10-20 16:17:02.520237 Event: try to Connect to Controller
+On: 2011-10-20 16:17:03.823003 Event: init state
+On: 2011-10-20 16:17:03.823255 Event: Register Account to SIP server
+On: 2011-10-20 16:17:03.823681 Event: 100
+On: 2011-10-20 16:17:03.823765 Event: Caller Handler Ready
+On: 2011-10-20 16:17:05.829452 Event: Terminate
+On: 2011-10-20 16:17:05.829491 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 16:43:27.421197 ------------------
+On: 2011-10-20 16:43:27.441977 Event: try to Connect to Controller
+On: 2011-10-20 16:43:28.739596 Event: init state
+On: 2011-10-20 16:43:28.739838 Event: Register Account to SIP server
+On: 2011-10-20 16:43:28.740260 Event: 100
+On: 2011-10-20 16:43:28.740345 Event: Caller Handler Ready
+On: 2011-10-20 16:43:30.746511 Event: Terminate
+On: 2011-10-20 16:43:30.746553 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 16:47:39.800319 ------------------
+On: 2011-10-20 16:47:39.820934 Event: try to Connect to Controller
+On: 2011-10-20 16:47:41.129910 Event: init state
+On: 2011-10-20 16:47:41.130157 Event: Register Account to SIP server
+On: 2011-10-20 16:47:41.130582 Event: 100
+On: 2011-10-20 16:47:41.130667 Event: Caller Handler Ready
+On: 2011-10-20 16:47:51.152553 Event: CALL START
+On: 2011-10-20 16:47:51.152615 Event: Make a call to: 4661455
+On: 2011-10-20 16:47:54.310678 Event: Call Connecting
+On: 2011-10-20 16:47:54.310727 Event: 200
+On: 2011-10-20 16:47:54.489838 Event: Terminate
+On: 2011-10-20 16:47:54.489885 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 16:51:39.644138 ------------------
+On: 2011-10-20 16:51:39.665348 Event: try to Connect to Controller
+On: 2011-10-20 16:51:40.887032 Event: init state
+On: 2011-10-20 16:51:40.887272 Event: Register Account to SIP server
+On: 2011-10-20 16:51:40.887697 Event: 100
+On: 2011-10-20 16:51:40.887782 Event: Caller Handler Ready
+On: 2011-10-20 16:51:50.910402 Event: CALL START
+On: 2011-10-20 16:51:50.910464 Event: Make a call to: 4661455
+On: 2011-10-20 16:51:52.721146 Event: Call Connecting
+On: 2011-10-20 16:51:52.721198 Event: 200
+On: 2011-10-20 16:51:52.929864 Event: Terminate
+On: 2011-10-20 16:51:52.929912 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 16:54:47.689027 ------------------
+On: 2011-10-20 16:54:47.710069 Event: try to Connect to Controller
+On: 2011-10-20 16:54:49.002075 Event: init state
+On: 2011-10-20 16:54:49.002317 Event: Register Account to SIP server
+On: 2011-10-20 16:54:49.002742 Event: 100
+On: 2011-10-20 16:54:49.002827 Event: Caller Handler Ready
+On: 2011-10-20 16:54:59.021772 Event: CALL START
+On: 2011-10-20 16:54:59.021840 Event: Make a call to: 4661455
+On: 2011-10-20 16:55:01.072065 Event: Call Connecting
+On: 2011-10-20 16:55:01.072115 Event: 200
+On: 2011-10-20 16:55:01.258358 Event: Terminate
+On: 2011-10-20 16:55:01.258415 Event: Goodbye
+
+
+------------------STARTED THE LOGGING 2011-10-20 17:47:24.473255 ------------------
+On: 2011-10-20 17:47:24.545171 Event: try to Connect to Controller
+On: 2011-10-20 17:47:24.797008 Event: init state
+On: 2011-10-20 17:47:24.797256 Event: Register Account to SIP server
+On: 2011-10-20 17:47:24.797692 Event: 100
+On: 2011-10-20 17:47:24.797818 Event: Caller Handler Ready
+On: 2011-10-20 17:47:29.805743 Event: CALL START
+On: 2011-10-20 17:47:29.805802 Event: Make a call to: 77224
+On: 2011-10-20 17:47:56.803803 Event: Terminate
+On: 2011-10-20 17:47:56.803847 Event: Goodbye
diff --git a/For Weekly Test/tricode/callorigTest.py b/For Weekly Test/tricode/callorigTest.py
new file mode 100644
index 0000000..13c0561
--- /dev/null
+++ b/For Weekly Test/tricode/callorigTest.py
@@ -0,0 +1,172 @@
+# $Id$
+#
+# SIP call sample.
+#
+# Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+import sys
+import pjsua as pj
+
+LOG_LEVEL=3
+current_call = None
+
+# Logging callback
+def log_cb(level, str, len):
+ print str,
+
+
+# Callback to receive events from account
+class MyAccountCallback(pj.AccountCallback):
+
+ def __init__(self, account=None):
+ pj.AccountCallback.__init__(self, account)
+
+ # Notification on incoming call
+ def on_incoming_call(self, call):
+ global current_call
+ if current_call:
+ call.answer(486, "Busy")
+ return
+
+ print "Incoming call from ", call.info().remote_uri
+ print "Press 'a' to answer"
+
+ current_call = call
+
+ call_cb = MyCallCallback(current_call)
+ current_call.set_callback(call_cb)
+
+ current_call.answer(180)
+
+
+# Callback to receive events from Call
+class MyCallCallback(pj.CallCallback):
+
+ def __init__(self, call=None):
+ pj.CallCallback.__init__(self, call)
+
+ # Notification when call state has changed
+ def on_state(self):
+ global current_call
+ print "Call with", self.call.info().remote_uri,
+ print "is", self.call.info().state_text,
+ print "last code =", self.call.info().last_code,
+ print "(" + self.call.info().last_reason + ")"
+
+ if self.call.info().state == pj.CallState.DISCONNECTED:
+ current_call = None
+ print 'Current call is', current_call
+
+ # Notification when call's media state has changed.
+ def on_media_state(self):
+ if self.call.info().media_state == pj.MediaState.ACTIVE:
+ # Connect the call to sound device
+ call_slot = self.call.info().conf_slot
+ pj.Lib.instance().conf_connect(call_slot, 0)
+ pj.Lib.instance().conf_connect(0, call_slot)
+ print "Media is now active"
+ else:
+ print "Media is inactive"
+
+# Function to make call
+def make_call(uri):
+ try:
+ print "Making call to", uri
+ return acc.make_call(uri, cb=MyCallCallback())
+ except pj.Error, e:
+ print "Exception: " + str(e)
+ return None
+
+
+# Create library instance
+lib = pj.Lib()
+
+try:
+ # Init library with default config and some customized
+ # logging config.
+ lib.init(log_cfg = pj.LogConfig(level=LOG_LEVEL, callback=log_cb))
+
+ # Create UDP transport which listens to any available port
+ transport = lib.create_transport(pj.TransportType.UDP,
+ pj.TransportConfig(0))
+ print "\nListening on", transport.info().host,
+ print "port", transport.info().port, "\n"
+
+ # Start the library
+ lib.start()
+ lib.set_null_snd_dev()
+
+ # Create local account
+ acc_cfg = pj.AccountConfig("132.230.4.8", "mpselftest1", "1mpselftest")
+ #acc_cfg = pj.AccountConfig("132.230.252.228", "4976120397898", "itzEfmLkzvS9")
+ acc = lib.create_account(acc_cfg, cb=MyAccountCallback())
+
+ # If argument is specified then make call to the URI
+ if len(sys.argv) > 1:
+ lck = lib.auto_lock()
+ current_call = make_call(sys.argv[1])
+ print 'Current call is', current_call
+ del lck
+
+ my_sip_uri = "sip:" + transport.info().host + \
+ ":" + str(transport.info().port)
+
+ # Menu loop
+ while True:
+ print "My SIP URI is", my_sip_uri
+ print "Menu: m=make call, h=hangup call, a=answer call, q=quit"
+
+ input = sys.stdin.readline().rstrip("\r\n")
+ if input == "m":
+ if current_call:
+ print "Already have another call"
+ continue
+ print "Enter destination URI to call: ",
+ input = sys.stdin.readline().rstrip("\r\n")
+ if input == "":
+ continue
+ lck = lib.auto_lock()
+ current_call = make_call("sip:"+input+"@132.230.4.8")
+ del lck
+
+ elif input == "h":
+ if not current_call:
+ print "There is no call"
+ continue
+ current_call.hangup()
+
+ elif input == "a":
+ if not current_call:
+ print "There is no call"
+ continue
+ current_call.answer(200)
+
+ elif input == "q":
+ break
+
+ # Shutdown the library
+ transport = None
+ acc.delete()
+ acc = None
+ lib.destroy()
+ lib = None
+
+except pj.Error, e:
+ print "Exception: " + str(e)
+ lib.destroy()
+ lib = None
+
diff --git a/For Weekly Test/tricode/class/pBarcode128.class.php b/For Weekly Test/tricode/class/pBarcode128.class.php
new file mode 100644
index 0000000..07f5db8
--- /dev/null
+++ b/For Weekly Test/tricode/class/pBarcode128.class.php
@@ -0,0 +1,184 @@
+<?php
+ /*
+ pBarcode128 - class to create barcodes (128B)
+
+ Version : 2.1.2
+ Made by : Jean-Damien POGOLOTTI
+ Last Update : 03/08/11
+
+ This file can be distributed under the license you can find at :
+
+ http://www.pchart.net/license
+
+ You can find the whole class documentation on the pChart web site.
+ */
+
+ /* pData class definition */
+ class pBarcode128
+ {
+ var $Codes;
+ var $Reverse;
+ var $Result;
+ var $pChartObject;
+ var $CRC;
+
+ /* Class creator */
+ function pBarcode128($BasePath="")
+ {
+ $this->Codes = "";
+ $this->Reverse = "";
+
+ $FileHandle = @fopen($BasePath."data/128B.db", "r");
+
+ if (!$FileHandle) { die("Cannot find barcode database (".$BasePath."128B.db)."); }
+
+ while (!feof($FileHandle))
+ {
+ $Buffer = fgets($FileHandle,4096);
+ $Buffer = str_replace(chr(10),"",$Buffer);
+ $Buffer = str_replace(chr(13),"",$Buffer);
+ $Values = preg_split("/;/",$Buffer);
+
+ $this->Codes[$Values[1]]["ID"] = $Values[0];
+ $this->Codes[$Values[1]]["Code"] = $Values[2];
+ $this->Reverse[$Values[0]]["Code"] = $Values[2];
+ $this->Reverse[$Values[0]]["Asc"] = $Values[1];
+ }
+ fclose($FileHandle);
+ }
+
+ /* Return the projected size of a barcode */
+ function getSize($TextString,$Format="")
+ {
+ $Angle = isset($Format["Angle"]) ? $Format["Angle"] : 0;
+ $ShowLegend = isset($Format["ShowLegend"]) ? $Format["ShowLegend"] : FALSE;
+ $LegendOffset = isset($Format["LegendOffset"]) ? $Format["LegendOffset"] : 5;
+ $DrawArea = isset($Format["DrawArea"]) ? $Format["DrawArea"] : FALSE;
+ $FontSize = isset($Format["FontSize"]) ? $Format["FontSize"] : 12;
+ $Height = isset($Format["Height"]) ? $Format["Height"] : 30;
+
+ $TextString = $this->encode128($TextString);
+ $BarcodeLength = strlen($this->Result);
+
+ if ( $DrawArea ) { $WOffset = 20; } else { $WOffset = 0; }
+ if ( $ShowLegend ) { $HOffset = $FontSize+$LegendOffset+$WOffset; } else { $HOffset = 0; }
+
+ $X1 = cos($Angle * PI / 180) * ($WOffset+$BarcodeLength);
+ $Y1 = sin($Angle * PI / 180) * ($WOffset+$BarcodeLength);
+
+ $X2 = $X1 + cos(($Angle+90) * PI / 180) * ($HOffset+$Height);
+ $Y2 = $Y1 + sin(($Angle+90) * PI / 180) * ($HOffset+$Height);
+
+
+ $AreaWidth = max(abs($X1),abs($X2));
+ $AreaHeight = max(abs($Y1),abs($Y2));
+
+ return(array("Width"=>$AreaWidth,"Height"=>$AreaHeight));
+ }
+
+ function encode128($Value,$Format="")
+ {
+ $this->Result = "11010010000";
+ $this->CRC = 104;
+ $TextString = "";
+
+ for($i=1;$i<=strlen($Value);$i++)
+ {
+ $CharCode = ord($this->mid($Value,$i,1));
+ if ( isset($this->Codes[$CharCode]) )
+ {
+ $this->Result = $this->Result.$this->Codes[$CharCode]["Code"];
+ $this->CRC = $this->CRC + $i*$this->Codes[$CharCode]["ID"];
+ $TextString = $TextString.chr($CharCode);
+ }
+ }
+ $this->CRC = $this->CRC - floor($this->CRC/103)*103;
+
+ $this->Result = $this->Result.$this->Reverse[$this->CRC]["Code"];
+ $this->Result = $this->Result."1100011101011";
+
+ return($TextString);
+ }
+
+ /* Create the encoded string */
+ function draw($Object,$Value,$X,$Y,$Format="")
+ {
+ $this->pChartObject = $Object;
+
+ $R = isset($Format["R"]) ? $Format["R"] : 0;
+ $G = isset($Format["G"]) ? $Format["G"] : 0;
+ $B = isset($Format["B"]) ? $Format["B"] : 0;
+ $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
+ $Height = isset($Format["Height"]) ? $Format["Height"] : 30;
+ $Angle = isset($Format["Angle"]) ? $Format["Angle"] : 0;
+ $ShowLegend = isset($Format["ShowLegend"]) ? $Format["ShowLegend"] : FALSE;
+ $LegendOffset = isset($Format["LegendOffset"]) ? $Format["LegendOffset"] : 5;
+ $DrawArea = isset($Format["DrawArea"]) ? $Format["DrawArea"] : FALSE;
+ $AreaR = isset($Format["AreaR"]) ? $Format["AreaR"] : 255;
+ $AreaG = isset($Format["AreaG"]) ? $Format["AreaG"] : 255;
+ $AreaB = isset($Format["AreaB"]) ? $Format["AreaB"] : 255;
+ $AreaBorderR = isset($Format["AreaBorderR"]) ? $Format["AreaBorderR"] : $AreaR;
+ $AreaBorderG = isset($Format["AreaBorderG"]) ? $Format["AreaBorderG"] : $AreaG;
+ $AreaBorderB = isset($Format["AreaBorderB"]) ? $Format["AreaBorderB"] : $AreaB;
+
+ $TextString = $this->encode128($Value);
+
+ if ( $DrawArea )
+ {
+ $X1 = $X + cos(($Angle-135) * PI / 180) * 10;
+ $Y1 = $Y + sin(($Angle-135) * PI / 180) * 10;
+
+ $X2 = $X1 + cos($Angle * PI / 180) * (strlen($this->Result)+20);
+ $Y2 = $Y1 + sin($Angle * PI / 180) * (strlen($this->Result)+20);
+
+ if ( $ShowLegend )
+ {
+ $X3 = $X2 + cos(($Angle+90) * PI / 180) * ($Height+$LegendOffset+$this->pChartObject->FontSize+10);
+ $Y3 = $Y2 + sin(($Angle+90) * PI / 180) * ($Height+$LegendOffset+$this->pChartObject->FontSize+10);
+ }
+ else
+ {
+ $X3 = $X2 + cos(($Angle+90) * PI / 180) * ($Height+20);
+ $Y3 = $Y2 + sin(($Angle+90) * PI / 180) * ($Height+20);
+ }
+
+ $X4 = $X3 + cos(($Angle+180) * PI / 180) * (strlen($this->Result)+20);
+ $Y4 = $Y3 + sin(($Angle+180) * PI / 180) * (strlen($this->Result)+20);
+
+ $Polygon = array($X1,$Y1,$X2,$Y2,$X3,$Y3,$X4,$Y4);
+ $Settings = array("R"=>$AreaR,"G"=>$AreaG,"B"=>$AreaB,"BorderR"=>$AreaBorderR,"BorderG"=>$AreaBorderG,"BorderB"=>$AreaBorderB);
+ $this->pChartObject->drawPolygon($Polygon,$Settings);
+ }
+
+ for($i=1;$i<=strlen($this->Result);$i++)
+ {
+ if ( $this->mid($this->Result,$i,1) == 1 )
+ {
+ $X1 = $X + cos($Angle * PI / 180) * $i;
+ $Y1 = $Y + sin($Angle * PI / 180) * $i;
+ $X2 = $X1 + cos(($Angle+90) * PI / 180) * $Height;
+ $Y2 = $Y1 + sin(($Angle+90) * PI / 180) * $Height;
+
+ $Settings = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha);
+ $this->pChartObject->drawLine($X1,$Y1,$X2,$Y2,$Settings);
+ }
+ }
+
+ if ( $ShowLegend )
+ {
+ $X1 = $X + cos($Angle * PI / 180) * (strlen($this->Result)/2);
+ $Y1 = $Y + sin($Angle * PI / 180) * (strlen($this->Result)/2);
+
+ $LegendX = $X1 + cos(($Angle+90) * PI / 180) * ($Height+$LegendOffset);
+ $LegendY = $Y1 + sin(($Angle+90) * PI / 180) * ($Height+$LegendOffset);
+
+ $Settings = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Angle"=>-$Angle,"Align"=>TEXT_ALIGN_TOPMIDDLE);
+ $this->pChartObject->drawText($LegendX,$LegendY,$TextString,$Settings);
+ }
+ }
+
+ function left($value,$NbChar) { return substr($value,0,$NbChar); }
+ function right($value,$NbChar) { return substr($value,strlen($value)-$NbChar,$NbChar); }
+ function mid($value,$Depart,$NbChar) { return substr($value,$Depart-1,$NbChar); }
+ }
+?> \ No newline at end of file
diff --git a/For Weekly Test/tricode/class/pBarcode39.class.php b/For Weekly Test/tricode/class/pBarcode39.class.php
new file mode 100644
index 0000000..8d57b71
--- /dev/null
+++ b/For Weekly Test/tricode/class/pBarcode39.class.php
@@ -0,0 +1,200 @@
+<?php
+ /*
+ pBarcode39 - class to create barcodes (39B)
+
+ Version : 2.1.2
+ Made by : Jean-Damien POGOLOTTI
+ Last Update : 03/08/11
+
+ This file can be distributed under the license you can find at :
+
+ http://www.pchart.net/license
+
+ You can find the whole class documentation on the pChart web site.
+ */
+
+ /* pData class definition */
+ class pBarcode39
+ {
+ var $Codes;
+ var $Reverse;
+ var $Result;
+ var $pChartObject;
+ var $CRC;
+ var $MOD43;
+
+ /* Class creator */
+ function pBarcode39($BasePath="",$EnableMOD43=FALSE)
+ {
+ $this->MOD43 = $EnableMOD43;
+ $this->Codes = "";
+ $this->Reverse = "";
+
+ $FileHandle = @fopen($BasePath."data/39.db", "r");
+
+ if (!$FileHandle) { die("Cannot find barcode database (".$BasePath."data/39.db)."); }
+
+ while (!feof($FileHandle))
+ {
+ $Buffer = fgets($FileHandle,4096);
+ $Buffer = str_replace(chr(10),"",$Buffer);
+ $Buffer = str_replace(chr(13),"",$Buffer);
+ $Values = preg_split("/;/",$Buffer);
+
+ $this->Codes[$Values[0]] = $Values[1];
+ }
+ fclose($FileHandle);
+ }
+
+ /* Return the projected size of a barcode */
+ function getSize($TextString,$Format="")
+ {
+ $Angle = isset($Format["Angle"]) ? $Format["Angle"] : 0;
+ $ShowLegend = isset($Format["ShowLegend"]) ? $Format["ShowLegend"] : FALSE;
+ $LegendOffset = isset($Format["LegendOffset"]) ? $Format["LegendOffset"] : 5;
+ $DrawArea = isset($Format["DrawArea"]) ? $Format["DrawArea"] : FALSE;
+ $FontSize = isset($Format["FontSize"]) ? $Format["FontSize"] : 12;
+ $Height = isset($Format["Height"]) ? $Format["Height"] : 30;
+
+ $TextString = $this->encode39($TextString);
+ $BarcodeLength = strlen($this->Result);
+
+ if ( $DrawArea ) { $WOffset = 20; } else { $WOffset = 0; }
+ if ( $ShowLegend ) { $HOffset = $FontSize+$LegendOffset+$WOffset; } else { $HOffset = 0; }
+
+ $X1 = cos($Angle * PI / 180) * ($WOffset+$BarcodeLength);
+ $Y1 = sin($Angle * PI / 180) * ($WOffset+$BarcodeLength);
+
+ $X2 = $X1 + cos(($Angle+90) * PI / 180) * ($HOffset+$Height);
+ $Y2 = $Y1 + sin(($Angle+90) * PI / 180) * ($HOffset+$Height);
+
+
+ $AreaWidth = max(abs($X1),abs($X2));
+ $AreaHeight = max(abs($Y1),abs($Y2));
+
+ return(array("Width"=>$AreaWidth,"Height"=>$AreaHeight));
+ }
+
+ /* Create the encoded string */
+ function encode39($Value)
+ {
+ $this->Result = "100101101101"."0";
+ $TextString = "";
+ for($i=1;$i<=strlen($Value);$i++)
+ {
+ $CharCode = ord($this->mid($Value,$i,1));
+ if ( $CharCode >= 97 && $CharCode <= 122 ) { $CharCode = $CharCode - 32; }
+
+ if ( isset($this->Codes[chr($CharCode)]) )
+ {
+ $this->Result = $this->Result.$this->Codes[chr($CharCode)]."0";
+ $TextString = $TextString.chr($CharCode);
+ }
+ }
+
+ if ( $this->MOD43 )
+ {
+ $Checksum = $this->checksum($TextString);
+ $this->Result = $this->Result.$this->Codes[$Checksum]."0";
+ }
+
+ $this->Result = $this->Result."100101101101";
+ $TextString = "*".$TextString."*";
+
+ return($TextString);
+ }
+
+ /* Create the encoded string */
+ function draw($Object,$Value,$X,$Y,$Format="")
+ {
+ $this->pChartObject = $Object;
+
+ $R = isset($Format["R"]) ? $Format["R"] : 0;
+ $G = isset($Format["G"]) ? $Format["G"] : 0;
+ $B = isset($Format["B"]) ? $Format["B"] : 0;
+ $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
+ $Height = isset($Format["Height"]) ? $Format["Height"] : 30;
+ $Angle = isset($Format["Angle"]) ? $Format["Angle"] : 0;
+ $ShowLegend = isset($Format["ShowLegend"]) ? $Format["ShowLegend"] : FALSE;
+ $LegendOffset = isset($Format["LegendOffset"]) ? $Format["LegendOffset"] : 5;
+ $DrawArea = isset($Format["DrawArea"]) ? $Format["DrawArea"] : FALSE;
+ $AreaR = isset($Format["AreaR"]) ? $Format["AreaR"] : 255;
+ $AreaG = isset($Format["AreaG"]) ? $Format["AreaG"] : 255;
+ $AreaB = isset($Format["AreaB"]) ? $Format["AreaB"] : 255;
+ $AreaBorderR = isset($Format["AreaBorderR"]) ? $Format["AreaBorderR"] : $AreaR;
+ $AreaBorderG = isset($Format["AreaBorderG"]) ? $Format["AreaBorderG"] : $AreaG;
+ $AreaBorderB = isset($Format["AreaBorderB"]) ? $Format["AreaBorderB"] : $AreaB;
+
+ $TextString = $this->encode39($Value);
+
+ if ( $DrawArea )
+ {
+ $X1 = $X + cos(($Angle-135) * PI / 180) * 10;
+ $Y1 = $Y + sin(($Angle-135) * PI / 180) * 10;
+
+ $X2 = $X1 + cos($Angle * PI / 180) * (strlen($this->Result)+20);
+ $Y2 = $Y1 + sin($Angle * PI / 180) * (strlen($this->Result)+20);
+
+ if ( $ShowLegend )
+ {
+ $X3 = $X2 + cos(($Angle+90) * PI / 180) * ($Height+$LegendOffset+$this->pChartObject->FontSize+10);
+ $Y3 = $Y2 + sin(($Angle+90) * PI / 180) * ($Height+$LegendOffset+$this->pChartObject->FontSize+10);
+ }
+ else
+ {
+ $X3 = $X2 + cos(($Angle+90) * PI / 180) * ($Height+20);
+ $Y3 = $Y2 + sin(($Angle+90) * PI / 180) * ($Height+20);
+ }
+
+ $X4 = $X3 + cos(($Angle+180) * PI / 180) * (strlen($this->Result)+20);
+ $Y4 = $Y3 + sin(($Angle+180) * PI / 180) * (strlen($this->Result)+20);
+
+ $Polygon = array($X1,$Y1,$X2,$Y2,$X3,$Y3,$X4,$Y4);
+ $Settings = array("R"=>$AreaR,"G"=>$AreaG,"B"=>$AreaB,"BorderR"=>$AreaBorderR,"BorderG"=>$AreaBorderG,"BorderB"=>$AreaBorderB);
+ $this->pChartObject->drawPolygon($Polygon,$Settings);
+ }
+
+ for($i=1;$i<=strlen($this->Result);$i++)
+ {
+ if ( $this->mid($this->Result,$i,1) == 1 )
+ {
+ $X1 = $X + cos($Angle * PI / 180) * $i;
+ $Y1 = $Y + sin($Angle * PI / 180) * $i;
+ $X2 = $X1 + cos(($Angle+90) * PI / 180) * $Height;
+ $Y2 = $Y1 + sin(($Angle+90) * PI / 180) * $Height;
+
+ $Settings = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha);
+ $this->pChartObject->drawLine($X1,$Y1,$X2,$Y2,$Settings);
+ }
+ }
+
+ if ( $ShowLegend )
+ {
+ $X1 = $X + cos($Angle * PI / 180) * (strlen($this->Result)/2);
+ $Y1 = $Y + sin($Angle * PI / 180) * (strlen($this->Result)/2);
+
+ $LegendX = $X1 + cos(($Angle+90) * PI / 180) * ($Height+$LegendOffset);
+ $LegendY = $Y1 + sin(($Angle+90) * PI / 180) * ($Height+$LegendOffset);
+
+ $Settings = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Angle"=>-$Angle,"Align"=>TEXT_ALIGN_TOPMIDDLE);
+ $this->pChartObject->drawText($LegendX,$LegendY,$TextString,$Settings);
+ }
+ }
+
+ function checksum( $string )
+ {
+ $checksum = 0;
+ $length = strlen( $string );
+ $charset = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%';
+
+ for( $i=0; $i < $length; ++$i )
+ $checksum += strpos( $charset, $string[$i] );
+
+ return substr( $charset, ($checksum % 43), 1 );
+ }
+
+ function left($value,$NbChar) { return substr($value,0,$NbChar); }
+ function right($value,$NbChar) { return substr($value,strlen($value)-$NbChar,$NbChar); }
+ function mid($value,$Depart,$NbChar) { return substr($value,$Depart-1,$NbChar); }
+ }
+?> \ No newline at end of file
diff --git a/For Weekly Test/tricode/class/pBubble.class.php b/For Weekly Test/tricode/class/pBubble.class.php
new file mode 100644
index 0000000..483a1f3
--- /dev/null
+++ b/For Weekly Test/tricode/class/pBubble.class.php
@@ -0,0 +1,283 @@
+<?php
+ /*
+ pBubble - class to draw bubble charts
+
+ Version : 2.1.2
+ Made by : Jean-Damien POGOLOTTI
+ Last Update : 03/08/11
+
+ This file can be distributed under the license you can find at :
+
+ http://www.pchart.net/license
+
+ You can find the whole class documentation on the pChart web site.
+ */
+
+ /* pBubble class definition */
+ class pBubble
+ {
+ var $pChartObject;
+ var $pDataObject;
+
+ /* Class creator */
+ function pBubble($pChartObject,$pDataObject)
+ {
+ $this->pChartObject = $pChartObject;
+ $this->pDataObject = $pDataObject;
+ }
+
+ /* Prepare the scale */
+ function bubbleScale($DataSeries,$WeightSeries)
+ {
+ if ( !is_array($DataSeries) ) { $DataSeries = array($DataSeries); }
+ if ( !is_array($WeightSeries) ) { $WeightSeries = array($WeightSeries); }
+
+ /* Parse each data series to find the new min & max boundaries to scale */
+ $NewPositiveSerie = ""; $NewNegativeSerie = ""; $MaxValues = 0; $LastPositive = 0; $LastNegative = 0;
+ foreach($DataSeries as $Key => $SerieName)
+ {
+ $SerieWeightName = $WeightSeries[$Key];
+
+ $this->pDataObject->setSerieDrawable($SerieWeightName,FALSE);
+
+ if ( count($this->pDataObject->Data["Series"][$SerieName]["Data"]) > $MaxValues ) { $MaxValues = count($this->pDataObject->Data["Series"][$SerieName]["Data"]); }
+
+ foreach($this->pDataObject->Data["Series"][$SerieName]["Data"] as $Key => $Value)
+ {
+ if ( $Value >= 0 )
+ {
+ $BubbleBounds = $Value + $this->pDataObject->Data["Series"][$SerieWeightName]["Data"][$Key];
+
+ if ( !isset($NewPositiveSerie[$Key]) )
+ { $NewPositiveSerie[$Key] = $BubbleBounds; }
+ elseif ( $NewPositiveSerie[$Key] < $BubbleBounds )
+ { $NewPositiveSerie[$Key] = $BubbleBounds; }
+
+ $LastPositive = $BubbleBounds;
+ }
+ else
+ {
+ $BubbleBounds = $Value - $this->pDataObject->Data["Series"][$SerieWeightName]["Data"][$Key];
+
+ if ( !isset($NewNegativeSerie[$Key]) )
+ { $NewNegativeSerie[$Key] = $BubbleBounds; }
+ elseif ( $NewNegativeSerie[$Key] > $BubbleBounds )
+ { $NewNegativeSerie[$Key] = $BubbleBounds; }
+
+ $LastNegative = $BubbleBounds;
+ }
+ }
+ }
+
+ /* Check for missing values and all the fake positive serie */
+ if ( $NewPositiveSerie != "" )
+ {
+ for ($i=0; $i<$MaxValues; $i++) { if (!isset($NewPositiveSerie[$i])) { $NewPositiveSerie[$i] = $LastPositive; } }
+
+ $this->pDataObject->addPoints($NewPositiveSerie,"BubbleFakePositiveSerie");
+ }
+
+ /* Check for missing values and all the fake negative serie */
+ if ( $NewNegativeSerie != "" )
+ {
+ for ($i=0; $i<$MaxValues; $i++) { if (!isset($NewNegativeSerie[$i])) { $NewNegativeSerie[$i] = $LastNegative; } }
+
+ $this->pDataObject->addPoints($NewNegativeSerie,"BubbleFakeNegativeSerie");
+ }
+ }
+
+ function resetSeriesColors()
+ {
+ $Data = $this->pDataObject->getData();
+ $Palette = $this->pDataObject->getPalette();
+
+ $ID = 0;
+ foreach($Data["Series"] as $SerieName => $SeriesParameters)
+ {
+ if ( $SeriesParameters["isDrawable"] )
+ {
+ $this->pDataObject->Data["Series"][$SerieName]["Color"]["R"] = $Palette[$ID]["R"];
+ $this->pDataObject->Data["Series"][$SerieName]["Color"]["G"] = $Palette[$ID]["G"];
+ $this->pDataObject->Data["Series"][$SerieName]["Color"]["B"] = $Palette[$ID]["B"];
+ $this->pDataObject->Data["Series"][$SerieName]["Color"]["Alpha"] = $Palette[$ID]["Alpha"];
+ $ID++;
+ }
+ }
+ }
+
+ /* Prepare the scale */
+ function drawBubbleChart($DataSeries,$WeightSeries,$Format="")
+ {
+ $ForceAlpha = isset($Format["ForceAlpha"]) ? $Format["ForceAlpha"] : VOID;
+ $DrawBorder = isset($Format["DrawBorder"]) ? $Format["DrawBorder"] : TRUE;
+ $DrawSquare = isset($Format["DrawSquare"]) ? $Format["DrawSquare"] : FALSE;
+ $Surrounding = isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL;
+ $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : 0;
+ $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : 0;
+ $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : 0;
+ $BorderAlpha = isset($Format["BorderAlpha"]) ? $Format["BorderAlpha"] : 30;
+ $RecordImageMap = isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE;
+
+ if ( !is_array($DataSeries) ) { $DataSeries = array($DataSeries); }
+ if ( !is_array($WeightSeries) ) { $WeightSeries = array($WeightSeries); }
+
+ $Data = $this->pDataObject->getData();
+ $Palette = $this->pDataObject->getPalette();
+
+ if ( isset($Data["Series"]["BubbleFakePositiveSerie"] ) ) { $this->pDataObject->setSerieDrawable("BubbleFakePositiveSerie",FALSE); }
+ if ( isset($Data["Series"]["BubbleFakeNegativeSerie"] ) ) { $this->pDataObject->setSerieDrawable("BubbleFakeNegativeSerie",FALSE); }
+
+ $this->resetSeriesColors();
+
+ list($XMargin,$XDivs) = $this->pChartObject->scaleGetXSettings();
+
+ foreach($DataSeries as $Key => $SerieName)
+ {
+ $AxisID = $Data["Series"][$SerieName]["Axis"];
+ $Mode = $Data["Axis"][$AxisID]["Display"];
+ $Format = $Data["Axis"][$AxisID]["Format"];
+ $Unit = $Data["Axis"][$AxisID]["Unit"];
+
+ if (isset($Data["Series"][$SerieName]["Description"])) { $SerieDescription = $Data["Series"][$SerieName]["Description"]; } else { $SerieDescription = $SerieName; }
+
+ $XStep = ($this->pChartObject->GraphAreaX2-$this->pChartObject->GraphAreaX1-$XMargin*2)/$XDivs;
+
+ $X = $this->pChartObject->GraphAreaX1 + $XMargin;
+ $Y = $this->pChartObject->GraphAreaY1 + $XMargin;
+
+ $Color = array("R"=>$Palette[$Key]["R"],"G"=>$Palette[$Key]["G"],"B"=>$Palette[$Key]["B"],"Alpha"=>$Palette[$Key]["Alpha"]);
+
+ if ( $ForceAlpha != VOID ) { $Color["Alpha"]=$ForceAlpha; }
+
+ if ( $DrawBorder )
+ {
+ $Color["BorderAlpha"] = $BorderAlpha;
+
+ if ( $Surrounding != NULL )
+ { $Color["BorderR"] = $Palette[$Key]["R"]+$Surrounding; $Color["BorderG"] = $Palette[$Key]["G"]+$Surrounding; $Color["BorderB"] = $Palette[$Key]["B"]+$Surrounding; }
+ else
+ { $Color["BorderR"] = $BorderR; $Color["BorderG"] = $BorderG; $Color["BorderB"] = $BorderB; }
+
+ if ( $ForceAlpha != VOID ) { $Color["BorderAlpha"] = $ForceAlpha/2; }
+ }
+
+ foreach($Data["Series"][$SerieName]["Data"] as $iKey => $Point)
+ {
+ $Weight = $Point + $Data["Series"][$WeightSeries[$Key]]["Data"][$iKey];
+
+ $PosArray = $this->pChartObject->scaleComputeY($Point,array("AxisID"=>$AxisID));
+ $WeightArray = $this->pChartObject->scaleComputeY($Weight,array("AxisID"=>$AxisID));
+
+ if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
+ {
+ if ( $XDivs == 0 ) { $XStep = 0; } else { $XStep = ($this->pChartObject->GraphAreaX2-$this->pChartObject->GraphAreaX1-$XMargin*2)/$XDivs; }
+ $Y = floor($PosArray); $CircleRadius = floor(abs($PosArray - $WeightArray)/2);
+
+ if ( $DrawSquare )
+ {
+ if ( $RecordImageMap ) { $this->pChartObject->addToImageMap("RECT",floor($X-$CircleRadius).",".floor($Y-$CircleRadius).",".floor($X+$CircleRadius).",".floor($Y+$CircleRadius),$this->pChartObject->toHTMLColor($Palette[$Key]["R"],$Palette[$Key]["G"],$Palette[$Key]["B"]),$SerieDescription,$Data["Series"][$WeightSeries[$Key]]["Data"][$iKey]); }
+ $this->pChartObject->drawFilledRectangle($X-$CircleRadius,$Y-$CircleRadius,$X+$CircleRadius,$Y+$CircleRadius,$Color);
+ }
+ else
+ {
+ if ( $RecordImageMap ) { $this->pChartObject->addToImageMap("CIRCLE",floor($X).",".floor($Y).",".floor($CircleRadius),$this->pChartObject->toHTMLColor($Palette[$Key]["R"],$Palette[$Key]["G"],$Palette[$Key]["B"]),$SerieDescription,$Data["Series"][$WeightSeries[$Key]]["Data"][$iKey]); }
+ $this->pChartObject->drawFilledCircle($X,$Y,$CircleRadius,$Color);
+ }
+
+ $X = $X + $XStep;
+ }
+ elseif ( $Data["Orientation"] == SCALE_POS_TOPBOTTOM )
+ {
+ if ( $XDivs == 0 ) { $XStep = 0; } else { $XStep = ($this->pChartObject->GraphAreaY2-$this->pChartObject->GraphAreaY1-$XMargin*2)/$XDivs; }
+ $X = floor($PosArray); $CircleRadius = floor(abs($PosArray - $WeightArray)/2);
+
+ if ( $DrawSquare )
+ {
+ if ( $RecordImageMap ) { $this->pChartObject->addToImageMap("RECT",floor($X-$CircleRadius).",".floor($Y-$CircleRadius).",".floor($X+$CircleRadius).",".floor($Y+$CircleRadius),$this->pChartObject->toHTMLColor($Palette[$Key]["R"],$Palette[$Key]["G"],$Palette[$Key]["B"]),$SerieDescription,$Data["Series"][$WeightSeries[$Key]]["Data"][$iKey]); }
+ $this->pChartObject->drawFilledRectangle($X-$CircleRadius,$Y-$CircleRadius,$X+$CircleRadius,$Y+$CircleRadius,$Color);
+ }
+ else
+ {
+ if ( $RecordImageMap ) { $this->pChartObject->addToImageMap("CIRCLE",floor($X).",".floor($Y).",".floor($CircleRadius),$this->pChartObject->toHTMLColor($Palette[$Key]["R"],$Palette[$Key]["G"],$Palette[$Key]["B"]),$SerieDescription,$Data["Series"][$WeightSeries[$Key]]["Data"][$iKey]); }
+ $this->pChartObject->drawFilledCircle($X,$Y,$CircleRadius,$Color);
+ }
+
+ $Y = $Y + $XStep;
+ }
+ }
+ }
+ }
+
+ function writeBubbleLabel($SerieName,$SerieWeightName,$Points,$Format="")
+ {
+ $OverrideTitle = isset($Format["OverrideTitle"]) ? $Format["OverrideTitle"] : NULL;
+ $DrawPoint = isset($Format["DrawPoint"]) ? $Format["DrawPoint"] : LABEL_POINT_BOX;
+
+ if ( !is_array($Points) ) { $Point = $Points; $Points = ""; $Points[] = $Point; }
+
+ $Data = $this->pDataObject->getData();
+ $Palette = $this->pDataObject->getPalette();
+
+ if ( !isset($Data["Series"][$SerieName]) || !isset($Data["Series"][$SerieWeightName]) )
+ return(0);
+
+ list($XMargin,$XDivs) = $this->pChartObject->scaleGetXSettings();
+
+ $AxisID = $Data["Series"][$SerieName]["Axis"];
+ $AxisMode = $Data["Axis"][$AxisID]["Display"];
+ $AxisFormat = $Data["Axis"][$AxisID]["Format"];
+ $AxisUnit = $Data["Axis"][$AxisID]["Unit"];
+ $XStep = ($this->pChartObject->GraphAreaX2-$this->pChartObject->GraphAreaX1-$XMargin*2)/$XDivs;
+
+ $X = $this->pChartObject->GraphAreaX1 + $XMargin;
+ $Y = $this->pChartObject->GraphAreaY1 + $XMargin;
+
+ $Color = array("R"=>$Data["Series"][$SerieName]["Color"]["R"],"G"=>$Data["Series"][$SerieName]["Color"]["G"],"B"=>$Data["Series"][$SerieName]["Color"]["B"],"Alpha"=>$Data["Series"][$SerieName]["Color"]["Alpha"]);
+
+ foreach($Points as $Key => $Point)
+ {
+ $Value = $Data["Series"][$SerieName]["Data"][$Point];
+ $PosArray = $this->pChartObject->scaleComputeY($Value,array("AxisID"=>$AxisID));
+
+ if ( isset($Data["Abscissa"]) && isset($Data["Series"][$Data["Abscissa"]]["Data"][$Point]) )
+ $Abscissa = $Data["Series"][$Data["Abscissa"]]["Data"][$Point]." : ";
+ else
+ $Abscissa = "";
+
+ $Value = $this->pChartObject->scaleFormat($Value,$AxisMode,$AxisFormat,$AxisUnit);
+ $Weight = $Data["Series"][$SerieWeightName]["Data"][$Point];
+ $Caption = $Abscissa.$Value." / ".$Weight;
+
+ if ( isset($Data["Series"][$SerieName]["Description"]) )
+ $Description = $Data["Series"][$SerieName]["Description"];
+ else
+ $Description = "No description";
+
+ $Series = "";
+ $Series[] = array("Format"=>$Color,"Caption"=>$Caption);
+
+ if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
+ {
+ if ( $XDivs == 0 ) { $XStep = 0; } else { $XStep = ($this->pChartObject->GraphAreaX2-$this->pChartObject->GraphAreaX1-$XMargin*2)/$XDivs; }
+
+ $X = floor($X + $Point * $XStep);
+ $Y = floor($PosArray);
+ }
+ else
+ {
+ if ( $XDivs == 0 ) { $YStep = 0; } else { $YStep = ($this->pChartObject->GraphAreaY2-$this->pChartObject->GraphAreaY1-$XMargin*2)/$XDivs; }
+
+ $X = floor($PosArray);
+ $Y = floor($Y + $Point * $YStep);
+ }
+
+ if ( $DrawPoint == LABEL_POINT_CIRCLE )
+ $this->pChartObject->drawFilledCircle($X,$Y,3,array("R"=>255,"G"=>255,"B"=>255,"BorderR"=>0,"BorderG"=>0,"BorderB"=>0));
+ elseif ( $DrawPoint == LABEL_POINT_BOX )
+ $this->pChartObject->drawFilledRectangle($X-2,$Y-2,$X+2,$Y+2,array("R"=>255,"G"=>255,"B"=>255,"BorderR"=>0,"BorderG"=>0,"BorderB"=>0));
+
+ $this->pChartObject->drawLabelBox($X,$Y-3,$Description,$Series,$Format);
+ }
+ }
+ }
+?> \ No newline at end of file
diff --git a/For Weekly Test/tricode/class/pCache.class.php b/For Weekly Test/tricode/class/pCache.class.php
new file mode 100644
index 0000000..07d1d4e
--- /dev/null
+++ b/For Weekly Test/tricode/class/pCache.class.php
@@ -0,0 +1,280 @@
+<?php
+ /*
+ pCache - speed up the rendering by caching up the pictures
+
+ Version : 2.1.2
+ Made by : Jean-Damien POGOLOTTI
+ Last Update : 03/08/11
+
+ This file can be distributed under the license you can find at :
+
+ http://www.pchart.net/license
+
+ You can find the whole class documentation on the pChart web site.
+ */
+
+ /* pData class definition */
+ class pCache
+ {
+ var $CacheFolder;
+ var $CacheIndex;
+ var $CacheDB;
+
+ /* Class creator */
+ function pCache($Settings="")
+ {
+ $CacheFolder = isset($Settings["CacheFolder"]) ? $Settings["CacheFolder"] : "cache";
+ $CacheIndex = isset($Settings["CacheIndex"]) ? $Settings["CacheIndex"] : "index.db";
+ $CacheDB = isset($Settings["CacheDB"]) ? $Settings["CacheDB"] : "cache.db";
+
+ $this->CacheFolder = $CacheFolder;
+ $this->CacheIndex = $CacheIndex;
+ $this->CacheDB = $CacheDB;
+
+ if (!file_exists($this->CacheFolder."/".$this->CacheIndex)) { touch($this->CacheFolder."/".$this->CacheIndex); }
+ if (!file_exists($this->CacheFolder."/".$this->CacheDB)) { touch($this->CacheFolder."/".$this->CacheDB); }
+ }
+
+ /* Flush the cache contents */
+ function flush()
+ {
+ if (file_exists($this->CacheFolder."/".$this->CacheIndex)) { unlink($this->CacheFolder."/".$this->CacheIndex); touch($this->CacheFolder."/".$this->CacheIndex); }
+ if (file_exists($this->CacheFolder."/".$this->CacheDB)) { unlink($this->CacheFolder."/".$this->CacheDB); touch($this->CacheFolder."/".$this->CacheDB); }
+ }
+
+ /* Return the MD5 of the data array to clearly identify the chart */
+ function getHash($Data,$Marker="")
+ { return(md5($Marker.serialize($Data->Data))); }
+
+ /* Write the generated picture to the cache */
+ function writeToCache($ID,$pChartObject)
+ {
+ /* Compute the paths */
+ $TemporaryFile = $this->CacheFolder."/tmp_".rand(0,1000).".png";
+ $Database = $this->CacheFolder."/".$this->CacheDB;
+ $Index = $this->CacheFolder."/".$this->CacheIndex;
+
+ /* Flush the picture to a temporary file */
+ imagepng($pChartObject->Picture ,$TemporaryFile);
+
+ /* Retrieve the files size */
+ $PictureSize = filesize($TemporaryFile);
+ $DBSize = filesize($Database);
+
+ /* Save the index */
+ $Handle = fopen($Index,"a");
+ fwrite($Handle, $ID.",".$DBSize.",".$PictureSize.",".time().",0 \r\n");
+ fclose($Handle);
+
+ /* Get the picture raw contents */
+ $Handle = fopen($TemporaryFile,"r");
+ $Raw = fread($Handle,$PictureSize);
+ fclose($Handle);
+
+ /* Save the picture in the solid database file */
+ $Handle = fopen($Database,"a");
+ fwrite($Handle, $Raw);
+ fclose($Handle);
+
+ /* Remove temporary file */
+ unlink($TemporaryFile);
+ }
+
+ /* Remove object older than the specified TS */
+ function removeOlderThan($Expiry)
+ { $this->dbRemoval(array("Expiry"=>$Expiry)); }
+
+ /* Remove an object from the cache */
+ function remove($ID)
+ { $this->dbRemoval(array("Name"=>$ID)); }
+
+ /* Remove with specified criterias */
+ function dbRemoval($Settings)
+ {
+ $ID = isset($Settings["Name"]) ? $Settings["Name"] : NULL;
+ $Expiry = isset($Settings["Expiry"]) ? $Settings["Expiry"] : -(24*60*60);
+ $TS = time()-$Expiry;
+
+ /* Compute the paths */
+ $Database = $this->CacheFolder."/".$this->CacheDB;
+ $Index = $this->CacheFolder."/".$this->CacheIndex;
+ $DatabaseTemp = $this->CacheFolder."/".$this->CacheDB.".tmp";
+ $IndexTemp = $this->CacheFolder."/".$this->CacheIndex.".tmp";
+
+ /* Single file removal */
+ if ( $ID != NULL )
+ {
+ /* Retrieve object informations */
+ $Object = $this->isInCache($ID,TRUE);
+
+ /* If it's not in the cache DB, go away */
+ if ( !$Object ) { return(0); }
+ }
+
+ /* Create the temporary files */
+ if (!file_exists($DatabaseTemp)) { touch($DatabaseTemp); }
+ if (!file_exists($IndexTemp)) { touch($IndexTemp); }
+
+ /* Open the file handles */
+ $IndexHandle = @fopen($Index, "r");
+ $IndexTempHandle = @fopen($IndexTemp, "w");
+ $DBHandle = @fopen($Database, "r");
+ $DBTempHandle = @fopen($DatabaseTemp, "w");
+
+ /* Remove the selected ID from the database */
+ while (!feof($IndexHandle))
+ {
+ $Entry = fgets($IndexHandle, 4096);
+ $Entry = str_replace("\r","",$Entry);
+ $Entry = str_replace("\n","",$Entry);
+ $Settings = preg_split("/,/",$Entry);
+
+ if ( $Entry != "" )
+ {
+ $PicID = $Settings[0];
+ $DBPos = $Settings[1];
+ $PicSize = $Settings[2];
+ $GeneratedTS = $Settings[3];
+ $Hits = $Settings[4];
+
+ if ( $Settings[0] != $ID && $GeneratedTS > $TS)
+ {
+ $CurrentPos = ftell($DBTempHandle);
+ fwrite($IndexTempHandle, $PicID.",".$CurrentPos.",".$PicSize.",".$GeneratedTS.",".$Hits."\r\n");
+
+ fseek($DBHandle,$DBPos);
+ $Picture = fread($DBHandle,$PicSize);
+ fwrite($DBTempHandle,$Picture);
+ }
+ }
+ }
+
+ /* Close the handles */
+ fclose($IndexHandle);
+ fclose($IndexTempHandle);
+ fclose($DBHandle);
+ fclose($DBTempHandle);
+
+ /* Remove the prod files */
+ unlink($Database);
+ unlink($Index);
+
+ /* Swap the temp & prod DB */
+ rename($DatabaseTemp,$Database);
+ rename($IndexTemp,$Index);
+ }
+
+ function isInCache($ID,$Verbose=FALSE,$UpdateHitsCount=FALSE)
+ {
+ /* Compute the paths */
+ $Index = $this->CacheFolder."/".$this->CacheIndex;
+
+ /* Search the picture in the index file */
+ $Handle = @fopen($Index, "r");
+ while (!feof($Handle))
+ {
+ $IndexPos = ftell($Handle);
+ $Entry = fgets($Handle, 4096);
+ if ( $Entry != "" )
+ {
+ $Settings = preg_split("/,/",$Entry);
+ $PicID = $Settings[0];
+ if ( $PicID == $ID )
+ {
+ fclose($Handle);
+
+ $DBPos = $Settings[1];
+ $PicSize = $Settings[2];
+ $GeneratedTS = $Settings[3];
+ $Hits = intval($Settings[4]);
+
+ if ( $UpdateHitsCount )
+ {
+ $Hits++;
+ if ( strlen($Hits) < 7 ) { $Hits = $Hits.str_repeat(" ",7-strlen($Hits)); }
+
+ $Handle = @fopen($Index, "r+");
+ fseek($Handle,$IndexPos);
+ fwrite($Handle, $PicID.",".$DBPos.",".$PicSize.",".$GeneratedTS.",".$Hits."\r\n");
+ fclose($Handle);
+ }
+
+ if ($Verbose)
+ { return(array("DBPos"=>$DBPos,"PicSize"=>$PicSize,"GeneratedTS"=>$GeneratedTS,"Hits"=>$Hits)); }
+ else
+ { return(TRUE); }
+ }
+ }
+ }
+ fclose($Handle);
+
+ /* Picture isn't in the cache */
+ return(FALSE);
+ }
+
+ /* Automatic output method based on the calling interface */
+ function autoOutput($ID,$Destination="output.png")
+ {
+ if (php_sapi_name() == "cli")
+ $this->saveFromCache($ID,$Destination);
+ else
+ $this->strokeFromCache($ID);
+ }
+
+ function strokeFromCache($ID)
+ {
+ /* Get the raw picture from the cache */
+ $Picture = $this->getFromCache($ID);
+
+ /* Do we have a hit? */
+ if ( $Picture == NULL ) { return(FALSE); }
+
+ header('Content-type: image/png');
+ echo $Picture;
+
+ return(TRUE);
+ }
+
+ function saveFromCache($ID,$Destination)
+ {
+ /* Get the raw picture from the cache */
+ $Picture = $this->getFromCache($ID);
+
+ /* Do we have a hit? */
+ if ( $Picture == NULL ) { return(FALSE); }
+
+ /* Flush the picture to a file */
+ $Handle = fopen($Destination,"w");
+ fwrite($Handle,$Picture);
+ fclose($Handle);
+
+ /* All went fine */
+ return(TRUE);
+ }
+
+ function getFromCache($ID)
+ {
+ /* Compute the path */
+ $Database = $this->CacheFolder."/".$this->CacheDB;
+
+ /* Lookup for the picture in the cache */
+ $CacheInfo = $this->isInCache($ID,TRUE,TRUE);
+
+ /* Not in the cache */
+ if (!$CacheInfo) { return(NULL); }
+
+ /* Get the database extended information */
+ $DBPos = $CacheInfo["DBPos"];
+ $PicSize = $CacheInfo["PicSize"];
+
+ /* Extract the picture from the solid cache file */
+ $Handle = @fopen($Database, "r");
+ fseek($Handle,$DBPos);
+ $Picture = fread($Handle,$PicSize);
+ fclose($Handle);
+
+ /* Return back the raw picture data */
+ return($Picture);
+ }
+ }
+?> \ No newline at end of file
diff --git a/For Weekly Test/tricode/class/pData.class.php b/For Weekly Test/tricode/class/pData.class.php
new file mode 100644
index 0000000..9cfbc3f
--- /dev/null
+++ b/For Weekly Test/tricode/class/pData.class.php
@@ -0,0 +1,723 @@
+<?php
+ /*
+ pDraw - class to manipulate data arrays
+
+ Version : 2.1.2
+ Made by : Jean-Damien POGOLOTTI
+ Last Update : 03/08/11
+
+ This file can be distributed under the license you can find at :
+
+ http://www.pchart.net/license
+
+ You can find the whole class documentation on the pChart web site.
+ */
+
+ /* Axis configuration */
+ define("AXIS_FORMAT_DEFAULT" , 680001);
+ define("AXIS_FORMAT_TIME" , 680002);
+ define("AXIS_FORMAT_DATE" , 680003);
+ define("AXIS_FORMAT_METRIC" , 680004);
+ define("AXIS_FORMAT_CURRENCY" , 680005);
+
+ /* Axis position */
+ define("AXIS_POSITION_LEFT" , 681001);
+ define("AXIS_POSITION_RIGHT" , 681002);
+ define("AXIS_POSITION_TOP" , 681001);
+ define("AXIS_POSITION_BOTTOM" , 681002);
+
+ /* Families of data points */
+ define("SERIE_SHAPE_FILLEDCIRCLE" , 681011);
+ define("SERIE_SHAPE_FILLEDTRIANGLE" , 681012);
+ define("SERIE_SHAPE_FILLEDSQUARE" , 681013);
+ define("SERIE_SHAPE_FILLEDDIAMOND" , 681017);
+ define("SERIE_SHAPE_CIRCLE" , 681014);
+ define("SERIE_SHAPE_TRIANGLE" , 681015);
+ define("SERIE_SHAPE_SQUARE" , 681016);
+ define("SERIE_SHAPE_DIAMOND" , 681018);
+
+ /* Axis position */
+ define("AXIS_X" , 682001);
+ define("AXIS_Y" , 682002);
+
+ /* Define value limits */
+ define("ABSOLUTE_MIN" , -10000000000000);
+ define("ABSOLUTE_MAX" , 10000000000000);
+
+ /* Replacement to the PHP NULL keyword */
+ define("VOID" , 0.123456789);
+
+ /* pData class definition */
+ class pData
+ {
+ var $Data;
+
+ var $Palette = array("0"=>array("R"=>188,"G"=>224,"B"=>46,"Alpha"=>100),
+ "1"=>array("R"=>224,"G"=>100,"B"=>46,"Alpha"=>100),
+ "2"=>array("R"=>224,"G"=>214,"B"=>46,"Alpha"=>100),
+ "3"=>array("R"=>46,"G"=>151,"B"=>224,"Alpha"=>100),
+ "4"=>array("R"=>176,"G"=>46,"B"=>224,"Alpha"=>100),
+ "5"=>array("R"=>224,"G"=>46,"B"=>117,"Alpha"=>100),
+ "6"=>array("R"=>92,"G"=>224,"B"=>46,"Alpha"=>100),
+ "7"=>array("R"=>224,"G"=>176,"B"=>46,"Alpha"=>100));
+
+ /* Class creator */
+ function pData()
+ {
+ $this->Data = "";
+ $this->Data["XAxisDisplay"] = AXIS_FORMAT_DEFAULT;
+ $this->Data["XAxisFormat"] = NULL;
+ $this->Data["XAxisName"] = NULL;
+ $this->Data["XAxisUnit"] = NULL;
+ $this->Data["Abscissa"] = NULL;
+ $this->Data["Axis"][0]["Display"] = AXIS_FORMAT_DEFAULT;
+ $this->Data["Axis"][0]["Position"] = AXIS_POSITION_LEFT;
+ $this->Data["Axis"][0]["Identity"] = AXIS_Y;
+ }
+
+ /* Add a single point or an array to the given serie */
+ function addPoints($Values,$SerieName="Serie1")
+ {
+ if (!isset($this->Data["Series"][$SerieName]))
+ $this->initialise($SerieName);
+
+ if ( is_array($Values) )
+ {
+ foreach($Values as $Key => $Value)
+ { $this->Data["Series"][$SerieName]["Data"][] = $Value; }
+ }
+ else
+ $this->Data["Series"][$SerieName]["Data"][] = $Values;
+
+ if ( $Values != VOID )
+ {
+ $this->Data["Series"][$SerieName]["Max"] = max($this->stripVOID($this->Data["Series"][$SerieName]["Data"]));
+ $this->Data["Series"][$SerieName]["Min"] = min($this->stripVOID($this->Data["Series"][$SerieName]["Data"]));
+ }
+ }
+
+ /* Strip VOID values */
+ function stripVOID($Values)
+ { $Result = array(); foreach($Values as $Key => $Value) { if ( $Value != VOID ) { $Result[] = $Value; } } return($Result); }
+
+ /* Return the number of values contained in a given serie */
+ function getSerieCount($Serie)
+ { if (isset($this->Data["Series"][$Serie]["Data"])) { return(sizeof($this->Data["Series"][$Serie]["Data"])); } else { return(0); } }
+
+ /* Remove a serie from the pData object */
+ function removeSerie($Series)
+ {
+ if ( !is_array($Series) ) { $Series = $this->convertToArray($Series); }
+ foreach($Series as $Key => $Serie) { if (isset($this->Data["Series"][$Serie])) { unset($this->Data["Series"][$Serie]); } }
+ }
+
+ /* Return a value from given serie & index */
+ function getValueAt($Serie,$Index=0)
+ { if (isset($this->Data["Series"][$Serie]["Data"][$Index])) { return($this->Data["Series"][$Serie]["Data"][$Index]); } else { return(NULL); } }
+
+ /* Return the values array */
+ function getValues($Serie)
+ { if (isset($this->Data["Series"][$Serie]["Data"])) { return($this->Data["Series"][$Serie]["Data"]); } else { return(NULL); } }
+
+ /* Reverse the values in the given serie */
+ function reverseSerie($Series)
+ {
+ if ( !is_array($Series) ) { $Series = $this->convertToArray($Series); }
+ foreach($Series as $Key => $Serie) { if (isset($this->Data["Series"][$Serie]["Data"])) { $this->Data["Series"][$Serie]["Data"] = array_reverse($this->Data["Series"][$Serie]["Data"]); } }
+ }
+
+ /* Return the sum of the serie values */
+ function getSum($Serie)
+ { if (isset($this->Data["Series"][$Serie])) { return(array_sum($this->Data["Series"][$Serie]["Data"])); } else { return(NULL); } }
+
+ /* Return the max value of a given serie */
+ function getMax($Serie)
+ { if (isset($this->Data["Series"][$Serie]["Max"])) { return($this->Data["Series"][$Serie]["Max"]); } else { return(NULL); } }
+
+ /* Return the min value of a given serie */
+ function getMin($Serie)
+ { if (isset($this->Data["Series"][$Serie]["Min"])) { return($this->Data["Series"][$Serie]["Min"]); } else { return(NULL); } }
+
+ /* Set the description of a given serie */
+ function setSerieShape($Series,$Shape=SERIE_SHAPE_FILLEDCIRCLE)
+ {
+ if ( !is_array($Series) ) { $Series = $this->convertToArray($Series); }
+ foreach($Series as $Key => $Serie) { if (isset($this->Data["Series"][$Serie]) ) { $this->Data["Series"][$Serie]["Shape"] = $Shape; } }
+ }
+
+ /* Set the description of a given serie */
+ function setSerieDescription($Series,$Description="My serie")
+ {
+ if ( !is_array($Series) ) { $Series = $this->convertToArray($Series); }
+ foreach($Series as $Key => $Serie) { if (isset($this->Data["Series"][$Serie]) ) { $this->Data["Series"][$Serie]["Description"] = $Description; } }
+ }
+
+ /* Set a serie as "drawable" while calling a rendering function */
+ function setSerieDrawable($Series,$Drawable=TRUE)
+ {
+ if ( !is_array($Series) ) { $Series = $this->convertToArray($Series); }
+ foreach($Series as $Key => $Serie) { if (isset($this->Data["Series"][$Serie]) ) { $this->Data["Series"][$Serie]["isDrawable"] = $Drawable; } }
+ }
+
+ /* Set the icon associated to a given serie */
+ function setSeriePicture($Series,$Picture=NULL)
+ {
+ if ( !is_array($Series) ) { $Series = $this->convertToArray($Series); }
+ foreach($Series as $Key => $Serie) { if (isset($this->Data["Series"][$Serie]) ) { $this->Data["Series"][$Serie]["Picture"] = $Picture; } }
+ }
+
+ /* Set the name of the X Axis */
+ function setXAxisName($Name)
+ { $this->Data["XAxisName"] = $Name; }
+
+ /* Set the display mode of the X Axis */
+ function setXAxisDisplay($Mode,$Format=NULL)
+ { $this->Data["XAxisDisplay"] = $Mode; $this->Data["XAxisFormat"] = $Format; }
+
+ /* Set the unit that will be displayed on the X axis */
+ function setXAxisUnit($Unit)
+ { $this->Data["XAxisUnit"] = $Unit; }
+
+ /* Set the serie that will be used as abscissa */
+ function setAbscissa($Serie)
+ { if (isset($this->Data["Series"][$Serie])) { $this->Data["Abscissa"] = $Serie; } }
+
+ /* Set the name of the abscissa axis */
+ function setAbscissaName($Name)
+ { $this->Data["AbscissaName"] = $Name; }
+
+ /* Create a scatter group specifyin X and Y data series */
+ function setScatterSerie($SerieX,$SerieY,$ID=0)
+ { if (isset($this->Data["Series"][$SerieX]) && isset($this->Data["Series"][$SerieY]) ) { $this->initScatterSerie($ID); $this->Data["ScatterSeries"][$ID]["X"] = $SerieX; $this->Data["ScatterSeries"][$ID]["Y"] = $SerieY; } }
+
+ /* Set the shape of a given sctatter serie */
+ function setScatterSerieShape($ID,$Shape=SERIE_SHAPE_FILLEDCIRCLE)
+ { if (isset($this->Data["ScatterSeries"][$ID]) ) { $this->Data["ScatterSeries"][$ID]["Shape"] = $Shape; } }
+
+ /* Set the description of a given scatter serie */
+ function setScatterSerieDescription($ID,$Description="My serie")
+ { if (isset($this->Data["ScatterSeries"][$ID]) ) { $this->Data["ScatterSeries"][$ID]["Description"] = $Description; } }
+
+ /* Set the icon associated to a given scatter serie */
+ function setScatterSeriePicture($ID,$Picture=NULL)
+ { if (isset($this->Data["ScatterSeries"][$ID]) ) { $this->Data["ScatterSeries"][$ID]["Picture"] = $Picture; } }
+
+ /* Set a scatter serie as "drawable" while calling a rendering function */
+ function setScatterSerieDrawable($ID ,$Drawable=TRUE)
+ { if (isset($this->Data["ScatterSeries"][$ID]) ) { $this->Data["ScatterSeries"][$ID]["isDrawable"] = $Drawable; } }
+
+ /* Define if a scatter serie should be draw with ticks */
+ function setScatterSerieTicks($ID,$Width=0)
+ { if ( isset($this->Data["ScatterSeries"][$ID]) ) { $this->Data["ScatterSeries"][$ID]["Ticks"] = $Width; } }
+
+ /* Define if a scatter serie should be draw with a special weight */
+ function setScatterSerieWeight($ID,$Weight=0)
+ { if ( isset($this->Data["ScatterSeries"][$ID]) ) { $this->Data["ScatterSeries"][$ID]["Weight"] = $Weight; } }
+
+ /* Associate a color to a scatter serie */
+ function setScatterSerieColor($ID,$Format)
+ {
+ $R = isset($Format["R"]) ? $Format["R"] : 0;
+ $G = isset($Format["G"]) ? $Format["G"] : 0;
+ $B = isset($Format["B"]) ? $Format["B"] : 0;
+ $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
+
+ if ( isset($this->Data["ScatterSeries"][$ID]) )
+ {
+ $this->Data["ScatterSeries"][$ID]["Color"]["R"] = $R;
+ $this->Data["ScatterSeries"][$ID]["Color"]["G"] = $G;
+ $this->Data["ScatterSeries"][$ID]["Color"]["B"] = $B;
+ $this->Data["ScatterSeries"][$ID]["Color"]["Alpha"] = $Alpha;
+ }
+ }
+
+ /* Compute the series limits for an individual and global point of view */
+ function limits()
+ {
+ $GlobalMin = ABSOLUTE_MAX;
+ $GlobalMax = ABSOLUTE_MIN;
+
+ foreach($this->Data["Series"] as $Key => $Value)
+ {
+ if ( $this->Data["Abscissa"] != $Key && $this->Data["Series"][$Key]["isDrawable"] == TRUE)
+ {
+ if ( $GlobalMin > $this->Data["Series"][$Key]["Min"] ) { $GlobalMin = $this->Data["Series"][$Key]["Min"]; }
+ if ( $GlobalMax < $this->Data["Series"][$Key]["Max"] ) { $GlobalMax = $this->Data["Series"][$Key]["Max"]; }
+ }
+ }
+ $this->Data["Min"] = $GlobalMin;
+ $this->Data["Max"] = $GlobalMax;
+
+ return(array($GlobalMin,$GlobalMax));
+ }
+
+ /* Mark all series as drawable */
+ function drawAll()
+ { foreach($this->Data["Series"] as $Key => $Value) { if ( $this->Data["Abscissa"] != $Key ) { $this->Data["Series"][$Key]["isDrawable"]=TRUE; } } }
+
+ /* Return the average value of the given serie */
+ function getSerieAverage($Serie)
+ {
+ if ( isset($this->Data["Series"][$Serie]) )
+ {
+ $SerieData = $this->stripVOID($this->Data["Series"][$Serie]["Data"]);
+ return(array_sum($SerieData)/sizeof($SerieData));
+ }
+ else
+ return(NULL);
+ }
+
+ /* Return the geometric mean of the given serie */
+ function getGeometricMean($Serie)
+ {
+ if ( isset($this->Data["Series"][$Serie]) )
+ {
+ $SerieData = $this->stripVOID($this->Data["Series"][$Serie]["Data"]);
+ $Seriesum = 1; foreach($SerieData as $Key => $Value) { $Seriesum = $Seriesum * $Value; }
+ return(pow($Seriesum,1/sizeof($SerieData)));
+ }
+ else
+ return(NULL);
+ }
+
+ /* Return the harmonic mean of the given serie */
+ function getHarmonicMean($Serie)
+ {
+ if ( isset($this->Data["Series"][$Serie]) )
+ {
+ $SerieData = $this->stripVOID($this->Data["Series"][$Serie]["Data"]);
+ $Seriesum = 0; foreach($SerieData as $Key => $Value) { $Seriesum = $Seriesum + 1/$Value; }
+ return(sizeof($SerieData)/$Seriesum);
+ }
+ else
+ return(NULL);
+ }
+
+ /* Return the standard deviation of the given serie */
+ function getStandardDeviation($Serie)
+ {
+ if ( isset($this->Data["Series"][$Serie]) )
+ {
+ $Average = $this->getSerieAverage($Serie);
+ $SerieData = $this->stripVOID($this->Data["Series"][$Serie]["Data"]);
+
+ $DeviationSum = 0;
+ foreach($SerieData as $Key => $Value)
+ $DeviationSum = $DeviationSum + ($Value-$Average)*($Value-$Average);
+
+ $Deviation = sqrt($DeviationSum/count($SerieData));
+
+ return($Deviation);
+ }
+ else
+ return(NULL);
+ }
+
+ /* Return the Coefficient of variation of the given serie */
+ function getCoefficientOfVariation($Serie)
+ {
+ if ( isset($this->Data["Series"][$Serie]) )
+ {
+ $Average = $this->getSerieAverage($Serie);
+ $StandardDeviation = $this->getStandardDeviation($Serie);
+
+ if ( $StandardDeviation != 0 )
+ return($StandardDeviation/$Average);
+ else
+ return(NULL);
+ }
+ else
+ return(NULL);
+ }
+
+ /* Return the median value of the given serie */
+ function getSerieMedian($Serie)
+ {
+ if ( isset($this->Data["Series"][$Serie]) )
+ {
+ $SerieData = $this->stripVOID($this->Data["Series"][$Serie]["Data"]);
+ sort($SerieData);
+ $SerieCenter = floor(sizeof($SerieData)/2);
+
+ if ( isset($SerieData[$SerieCenter]) )
+ return($SerieData[$SerieCenter]);
+ else
+ return(NULL);
+ }
+ else
+ return(NULL);
+ }
+
+ /* Return the x th percentil of the given serie */
+ function getSeriePercentile($Serie="Serie1",$Percentil=95)
+ {
+ if (!isset($this->Data["Series"][$Serie]["Data"])) { return(NULL); }
+
+ $Values = count($this->Data["Series"][$Serie]["Data"])-1;
+ if ( $Values < 0 ) { $Values = 0; }
+
+ $PercentilID = floor(($Values/100)*$Percentil+.5);
+ $SortedValues = $this->Data["Series"][$Serie]["Data"];
+ sort($SortedValues);
+
+ if ( is_numeric($SortedValues[$PercentilID]) )
+ return($SortedValues[$PercentilID]);
+ else
+ return(NULL);
+ }
+
+ /* Add random values to a given serie */
+ function addRandomValues($SerieName="Serie1",$Options="")
+ {
+ $Values = isset($Options["Values"]) ? $Options["Values"] : 20;
+ $Min = isset($Options["Min"]) ? $Options["Min"] : 0;
+ $Max = isset($Options["Max"]) ? $Options["Max"] : 100;
+ $withFloat = isset($Options["withFloat"]) ? $Options["withFloat"] : FALSE;
+
+ for ($i=0;$i<=$Values;$i++)
+ {
+ if ( $withFloat ) { $Value = rand($Min*100,$Max*100)/100; } else { $Value = rand($Min,$Max); }
+ $this->addPoints($Value,$SerieName);
+ }
+ }
+
+ /* Test if we have valid data */
+ function containsData()
+ {
+ if (!isset($this->Data["Series"])) { return(FALSE); }
+
+ $Result = FALSE;
+ foreach($this->Data["Series"] as $Key => $Value)
+ { if ( $this->Data["Abscissa"] != $Key && $this->Data["Series"][$Key]["isDrawable"]==TRUE) { $Result=TRUE; } }
+ return($Result);
+ }
+
+ /* Set the display mode of an Axis */
+ function setAxisDisplay($AxisID,$Mode=AXIS_FORMAT_DEFAULT,$Format=NULL)
+ {
+ if ( isset($this->Data["Axis"][$AxisID] ) )
+ {
+ $this->Data["Axis"][$AxisID]["Display"] = $Mode;
+ if ( $Format != NULL ) { $this->Data["Axis"][$AxisID]["Format"] = $Format; }
+ }
+ }
+
+ /* Set the position of an Axis */
+ function setAxisPosition($AxisID,$Position=AXIS_POSITION_LEFT)
+ { if ( isset($this->Data["Axis"][$AxisID] ) ) { $this->Data["Axis"][$AxisID]["Position"] = $Position; } }
+
+ /* Associate an unit to an axis */
+ function setAxisUnit($AxisID,$Unit)
+ { if ( isset($this->Data["Axis"][$AxisID] ) ) { $this->Data["Axis"][$AxisID]["Unit"] = $Unit; } }
+
+ /* Associate a name to an axis */
+ function setAxisName($AxisID,$Name)
+ { if ( isset($this->Data["Axis"][$AxisID] ) ) { $this->Data["Axis"][$AxisID]["Name"] = $Name; } }
+
+ /* Associate a color to an axis */
+ function setAxisColor($AxisID,$Format)
+ {
+ $R = isset($Format["R"]) ? $Format["R"] : 0;
+ $G = isset($Format["G"]) ? $Format["G"] : 0;
+ $B = isset($Format["B"]) ? $Format["B"] : 0;
+ $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
+
+ if ( isset($this->Data["Axis"][$AxisID] ) )
+ {
+ $this->Data["Axis"][$AxisID]["Color"]["R"] = $R;
+ $this->Data["Axis"][$AxisID]["Color"]["G"] = $G;
+ $this->Data["Axis"][$AxisID]["Color"]["B"] = $B;
+ $this->Data["Axis"][$AxisID]["Color"]["Alpha"] = $Alpha;
+ }
+ }
+
+
+ /* Design an axis as X or Y member */
+ function setAxisXY($AxisID,$Identity=AXIS_Y)
+ { if ( isset($this->Data["Axis"][$AxisID] ) ) { $this->Data["Axis"][$AxisID]["Identity"] = $Identity; } }
+
+ /* Associate one data serie with one axis */
+ function setSerieOnAxis($Series,$AxisID)
+ {
+ if ( !is_array($Series) ) { $Series = $this->convertToArray($Series); }
+ foreach($Series as $Key => $Serie)
+ {
+ $PreviousAxis = $this->Data["Series"][$Serie]["Axis"];
+
+ /* Create missing axis */
+ if ( !isset($this->Data["Axis"][$AxisID] ) )
+ { $this->Data["Axis"][$AxisID]["Position"] = AXIS_POSITION_LEFT; $this->Data["Axis"][$AxisID]["Identity"] = AXIS_Y;}
+
+ $this->Data["Series"][$Serie]["Axis"] = $AxisID;
+
+ /* Cleanup unused axis */
+ $Found = FALSE;
+ foreach($this->Data["Series"] as $SerieName => $Values) { if ( $Values["Axis"] == $PreviousAxis ) { $Found = TRUE; } }
+ if (!$Found) { unset($this->Data["Axis"][$PreviousAxis]); }
+ }
+ }
+
+ /* Define if a serie should be draw with ticks */
+ function setSerieTicks($Series,$Width=0)
+ {
+ if ( !is_array($Series) ) { $Series = $this->convertToArray($Series); }
+ foreach($Series as $Key => $Serie) { if ( isset($this->Data["Series"][$Serie]) ) { $this->Data["Series"][$Serie]["Ticks"] = $Width; } }
+ }
+
+ /* Define if a serie should be draw with a special weight */
+ function setSerieWeight($Series,$Weight=0)
+ {
+ if ( !is_array($Series) ) { $Series = $this->convertToArray($Series); }
+ foreach($Series as $Key => $Serie) { if ( isset($this->Data["Series"][$Serie]) ) { $this->Data["Series"][$Serie]["Weight"] = $Weight; } }
+ }
+
+ /* Returns the palette of the given serie */
+ function getSeriePalette($Serie)
+ {
+ if ( !isset($this->Data["Series"][$Serie]) ) { return(NULL); }
+
+ $Result = "";
+ $Result["R"] = $this->Data["Series"][$Serie]["Color"]["R"];
+ $Result["G"] = $this->Data["Series"][$Serie]["Color"]["G"];
+ $Result["B"] = $this->Data["Series"][$Serie]["Color"]["B"];
+ $Result["Alpha"] = $this->Data["Series"][$Serie]["Color"]["Alpha"];
+
+ return($Result);
+ }
+
+ /* Set the color of one serie */
+ function setPalette($Series,$Format=NULL)
+ {
+ if ( !is_array($Series) ) { $Series = $this->convertToArray($Series); }
+
+ foreach($Series as $Key => $Serie)
+ {
+ $R = isset($Format["R"]) ? $Format["R"] : 0;
+ $G = isset($Format["G"]) ? $Format["G"] : 0;
+ $B = isset($Format["B"]) ? $Format["B"] : 0;
+ $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
+
+ if ( isset($this->Data["Series"][$Serie]) )
+ {
+ $OldR = $this->Data["Series"][$Serie]["Color"]["R"]; $OldG = $this->Data["Series"][$Serie]["Color"]["G"]; $OldB = $this->Data["Series"][$Serie]["Color"]["B"];
+ $this->Data["Series"][$Serie]["Color"]["R"] = $R;
+ $this->Data["Series"][$Serie]["Color"]["G"] = $G;
+ $this->Data["Series"][$Serie]["Color"]["B"] = $B;
+ $this->Data["Series"][$Serie]["Color"]["Alpha"] = $Alpha;
+
+ /* Do reverse processing on the internal palette array */
+ foreach ($this->Palette as $Key => $Value)
+ { if ($Value["R"] == $OldR && $Value["G"] == $OldG && $Value["B"] == $OldB) { $this->Palette[$Key]["R"] = $R; $this->Palette[$Key]["G"] = $G; $this->Palette[$Key]["B"] = $B; $this->Palette[$Key]["Alpha"] = $Alpha;} }
+ }
+ }
+ }
+
+ /* Load a palette file */
+ function loadPalette($FileName,$Overwrite=FALSE)
+ {
+ if ( !file_exists($FileName) ) { return(-1); }
+ if ( $Overwrite ) { $this->Palette = ""; }
+
+ $fileHandle = @fopen($FileName, "r");
+ if (!$fileHandle) { return(-1); }
+ while (!feof($fileHandle))
+ {
+ $buffer = fgets($fileHandle, 4096);
+ if ( preg_match("/,/",$buffer) )
+ {
+ list($R,$G,$B,$Alpha) = preg_split("/,/",$buffer);
+ if ( $this->Palette == "" ) { $ID = 0; } else { $ID = count($this->Palette); }
+ $this->Palette[$ID] = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha);
+ }
+ }
+ fclose($fileHandle);
+
+ /* Apply changes to current series */
+ $ID = 0;
+ if ( isset($this->Data["Series"]))
+ {
+ foreach($this->Data["Series"] as $Key => $Value)
+ {
+ if ( !isset($this->Palette[$ID]) )
+ $this->Data["Series"][$Key]["Color"] = array("R"=>0,"G"=>0,"B"=>0,"Alpha"=>0);
+ else
+ $this->Data["Series"][$Key]["Color"] = $this->Palette[$ID];
+ $ID++;
+ }
+ }
+ }
+
+ /* Initialise a given scatter serie */
+ function initScatterSerie($ID)
+ {
+ if ( isset($this->Data["ScatterSeries"][$ID]) ) { return(0); }
+
+ $this->Data["ScatterSeries"][$ID]["Description"] = "Scatter ".$ID;
+ $this->Data["ScatterSeries"][$ID]["isDrawable"] = TRUE;
+ $this->Data["ScatterSeries"][$ID]["Picture"] = NULL;
+ $this->Data["ScatterSeries"][$ID]["Ticks"] = 0;
+ $this->Data["ScatterSeries"][$ID]["Weight"] = 0;
+
+ if ( isset($this->Palette[$ID]) )
+ $this->Data["ScatterSeries"][$ID]["Color"] = $this->Palette[$ID];
+ else
+ {
+ $this->Data["ScatterSeries"][$ID]["Color"]["R"] = rand(0,255);
+ $this->Data["ScatterSeries"][$ID]["Color"]["G"] = rand(0,255);
+ $this->Data["ScatterSeries"][$ID]["Color"]["B"] = rand(0,255);
+ $this->Data["ScatterSeries"][$ID]["Color"]["Alpha"] = 100;
+ }
+ }
+
+ /* Initialise a given serie */
+ function initialise($Serie)
+ {
+ if ( isset($this->Data["Series"]) ) { $ID = count($this->Data["Series"]); } else { $ID = 0; }
+
+ $this->Data["Series"][$Serie]["Description"] = $Serie;
+ $this->Data["Series"][$Serie]["isDrawable"] = TRUE;
+ $this->Data["Series"][$Serie]["Picture"] = NULL;
+ $this->Data["Series"][$Serie]["Max"] = NULL;
+ $this->Data["Series"][$Serie]["Min"] = NULL;
+ $this->Data["Series"][$Serie]["Axis"] = 0;
+ $this->Data["Series"][$Serie]["Ticks"] = 0;
+ $this->Data["Series"][$Serie]["Weight"] = 0;
+ $this->Data["Series"][$Serie]["Shape"] = SERIE_SHAPE_FILLEDCIRCLE;
+
+ if ( isset($this->Palette[$ID]) )
+ $this->Data["Series"][$Serie]["Color"] = $this->Palette[$ID];
+ else
+ {
+ $this->Data["Series"][$Serie]["Color"]["R"] = rand(0,255);
+ $this->Data["Series"][$Serie]["Color"]["G"] = rand(0,255);
+ $this->Data["Series"][$Serie]["Color"]["B"] = rand(0,255);
+ $this->Data["Series"][$Serie]["Color"]["Alpha"] = 100;
+ }
+ }
+
+ function normalize($NormalizationFactor=100,$UnitChange=NULL,$Round=1)
+ {
+ $Abscissa = $this->Data["Abscissa"];
+
+ $SelectedSeries = "";
+ $MaxVal = 0;
+ foreach($this->Data["Axis"] as $AxisID => $Axis)
+ {
+ if ( $UnitChange != NULL ) { $this->Data["Axis"][$AxisID]["Unit"] = $UnitChange; }
+
+ foreach($this->Data["Series"] as $SerieName => $Serie)
+ {
+ if ($Serie["Axis"] == $AxisID && $Serie["isDrawable"] == TRUE && $SerieName != $Abscissa)
+ {
+ $SelectedSeries[$SerieName] = $SerieName;
+
+ if ( count($Serie["Data"] ) > $MaxVal ) { $MaxVal = count($Serie["Data"]); }
+ }
+ }
+ }
+
+ for($i=0;$i<=$MaxVal-1;$i++)
+ {
+ $Factor = 0;
+ foreach ($SelectedSeries as $Key => $SerieName )
+ {
+ $Value = $this->Data["Series"][$SerieName]["Data"][$i];
+ if ( $Value != VOID )
+ $Factor = $Factor + abs($Value);
+ }
+
+ if ( $Factor != 0 )
+ {
+ $Factor = $NormalizationFactor / $Factor;
+
+ foreach ($SelectedSeries as $Key => $SerieName )
+ {
+ $Value = $this->Data["Series"][$SerieName]["Data"][$i];
+
+ if ( $Value != VOID && $Factor != $NormalizationFactor )
+ $this->Data["Series"][$SerieName]["Data"][$i] = round(abs($Value)*$Factor,$Round);
+ elseif ( $Value == VOID || $Value == 0 )
+ $this->Data["Series"][$SerieName]["Data"][$i] = VOID;
+ elseif ( $Factor == $NormalizationFactor )
+ $this->Data["Series"][$SerieName]["Data"][$i] = $NormalizationFactor;
+ }
+ }
+ }
+
+ foreach ($SelectedSeries as $Key => $SerieName )
+ {
+ $this->Data["Series"][$SerieName]["Max"] = max($this->stripVOID($this->Data["Series"][$SerieName]["Data"]));
+ $this->Data["Series"][$SerieName]["Min"] = min($this->stripVOID($this->Data["Series"][$SerieName]["Data"]));
+ }
+ }
+
+ /* Load data from a CSV (or similar) data source */
+ function importFromCSV($FileName,$Options="")
+ {
+ $Delimiter = isset($Options["Delimiter"]) ? $Options["Delimiter"] : ",";
+ $GotHeader = isset($Options["GotHeader"]) ? $Options["GotHeader"] : FALSE;
+ $SkipColumns = isset($Options["SkipColumns"]) ? $Options["SkipColumns"] : array(-1);
+ $DefaultSerieName = isset($Options["DefaultSerieName"]) ? $Options["DefaultSerieName"] : "Serie";
+
+ $Handle = @fopen($FileName,"r");
+ if ($Handle)
+ {
+ $HeaderParsed = FALSE; $SerieNames = "";
+ while (!feof($Handle))
+ {
+ $Buffer = fgets($Handle, 4096);
+ $Buffer = str_replace(chr(10),"",$Buffer);
+ $Buffer = str_replace(chr(13),"",$Buffer);
+ $Values = preg_split("/".$Delimiter."/",$Buffer);
+
+ if ( $Buffer != "" )
+ {
+ if ( $GotHeader && !$HeaderParsed )
+ {
+ foreach($Values as $Key => $Name) { if ( !in_array($Key,$SkipColumns) ) { $SerieNames[$Key] = $Name; } }
+ $HeaderParsed = TRUE;
+ }
+ else
+ {
+ if ($SerieNames == "" ) { foreach($Values as $Key => $Name) { if ( !in_array($Key,$SkipColumns) ) { $SerieNames[$Key] = $DefaultSerieName.$Key; } } }
+ foreach($Values as $Key => $Value) { if ( !in_array($Key,$SkipColumns) ) { $this->addPoints($Value,$SerieNames[$Key]); } }
+ }
+ }
+ }
+ fclose($Handle);
+ }
+ }
+
+ /* Return the data & configuration of the series */
+ function getData()
+ { return($this->Data); }
+
+ /* Save a palette element */
+ function savePalette($ID,$Color)
+ { $this->Palette[$ID] = $Color; }
+
+ /* Return the palette of the series */
+ function getPalette()
+ { return($this->Palette); }
+
+ /* Called by the scaling algorithm to save the config */
+ function saveAxisConfig($Axis) { $this->Data["Axis"]=$Axis; }
+
+ /* Save the Y Margin if set */
+ function saveYMargin($Value) { $this->Data["YMargin"]=$Value; }
+
+ /* Save extended configuration to the pData object */
+ function saveExtendedData($Tag,$Values) { $this->Data["Extended"][$Tag]=$Values; }
+
+ /* Called by the scaling algorithm to save the orientation of the scale */
+ function saveOrientation($Orientation) { $this->Data["Orientation"]=$Orientation; }
+
+ /* Convert a string to a single elements array */
+ function convertToArray($Value)
+ { $Values = ""; $Values[] = $Value; return($Values); }
+
+ /* Class string wrapper */
+ function __toString()
+ { return("pData object."); }
+ }
+?> \ No newline at end of file
diff --git a/For Weekly Test/tricode/class/pDraw.class.php b/For Weekly Test/tricode/class/pDraw.class.php
new file mode 100644
index 0000000..85e408e
--- /dev/null
+++ b/For Weekly Test/tricode/class/pDraw.class.php
@@ -0,0 +1,5799 @@
+<?php
+ /*
+ pDraw - class extension with drawing methods
+
+ Version : 2.1.2
+ Made by : Jean-Damien POGOLOTTI
+ Last Update : 03/08/11
+
+ This file can be distributed under the license you can find at :
+
+ http://www.pchart.net/license
+
+ You can find the whole class documentation on the pChart web site.
+ */
+
+ define("DIRECTION_VERTICAL" , 690001);
+ define("DIRECTION_HORIZONTAL" , 690002);
+
+ define("SCALE_POS_LEFTRIGHT" , 690101);
+ define("SCALE_POS_TOPBOTTOM" , 690102);
+
+ define("SCALE_MODE_FLOATING" , 690201);
+ define("SCALE_MODE_START0" , 690202);
+ define("SCALE_MODE_ADDALL" , 690203);
+ define("SCALE_MODE_ADDALL_START0" , 690204);
+ define("SCALE_MODE_MANUAL" , 690205);
+
+ define("SCALE_SKIP_NONE" , 690301);
+ define("SCALE_SKIP_SAME" , 690302);
+ define("SCALE_SKIP_NUMBERS" , 690303);
+
+ define("TEXT_ALIGN_TOPLEFT" , 690401);
+ define("TEXT_ALIGN_TOPMIDDLE" , 690402);
+ define("TEXT_ALIGN_TOPRIGHT" , 690403);
+ define("TEXT_ALIGN_MIDDLELEFT" , 690404);
+ define("TEXT_ALIGN_MIDDLEMIDDLE" , 690405);
+ define("TEXT_ALIGN_MIDDLERIGHT" , 690406);
+ define("TEXT_ALIGN_BOTTOMLEFT" , 690407);
+ define("TEXT_ALIGN_BOTTOMMIDDLE" , 690408);
+ define("TEXT_ALIGN_BOTTOMRIGHT" , 690409);
+
+ define("POSITION_TOP" , 690501);
+ define("POSITION_BOTTOM" , 690502);
+
+ define("LABEL_POS_LEFT" , 690601);
+ define("LABEL_POS_CENTER" , 690602);
+ define("LABEL_POS_RIGHT" , 690603);
+ define("LABEL_POS_TOP" , 690604);
+ define("LABEL_POS_BOTTOM" , 690605);
+ define("LABEL_POS_INSIDE" , 690606);
+ define("LABEL_POS_OUTSIDE" , 690607);
+
+ define("ORIENTATION_HORIZONTAL" , 690701);
+ define("ORIENTATION_VERTICAL" , 690702);
+
+ define("LEGEND_NOBORDER" , 690800);
+ define("LEGEND_BOX" , 690801);
+ define("LEGEND_ROUND" , 690802);
+
+ define("LEGEND_VERTICAL" , 690901);
+ define("LEGEND_HORIZONTAL" , 690902);
+
+ define("LEGEND_FAMILY_BOX" , 691051);
+ define("LEGEND_FAMILY_CIRCLE" , 691052);
+ define("LEGEND_FAMILY_LINE" , 691053);
+
+ define("DISPLAY_AUTO" , 691001);
+ define("DISPLAY_MANUAL" , 691002);
+
+ define("LABELING_ALL" , 691011);
+ define("LABELING_DIFFERENT" , 691012);
+
+ define("BOUND_MIN" , 691021);
+ define("BOUND_MAX" , 691022);
+ define("BOUND_BOTH" , 691023);
+
+ define("BOUND_LABEL_POS_TOP" , 691031);
+ define("BOUND_LABEL_POS_BOTTOM" , 691032);
+ define("BOUND_LABEL_POS_AUTO" , 691033);
+
+ define("CAPTION_LEFT_TOP" , 691041);
+ define("CAPTION_RIGHT_BOTTOM" , 691042);
+
+ define("GRADIENT_SIMPLE" , 691051);
+ define("GRADIENT_EFFECT_CAN" , 691052);
+
+ define("LABEL_TITLE_NOBACKGROUND" , 691061);
+ define("LABEL_TITLE_BACKGROUND" , 691062);
+
+ define("LABEL_POINT_NONE" , 691071);
+ define("LABEL_POINT_CIRCLE" , 691072);
+ define("LABEL_POINT_BOX" , 691073);
+
+ define("PI" , 3.14159265);
+ define("ALL" , 69);
+ define("NONE" , 31);
+ define("AUTO" , 690000);
+ define("OUT_OF_SIGHT" , -10000000000000);
+
+ class pDraw
+ {
+ /* Returns the number of drawable series */
+ function countDrawableSeries()
+ {
+ $Results = 0;
+ $Data = $this->DataSet->getData();
+
+ foreach($Data["Series"] as $SerieName => $Serie)
+ { if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] ) { $Results++; } }
+
+ return($Results);
+ }
+
+ /* Fix box coordinates */
+ function fixBoxCoordinates($Xa,$Ya,$Xb,$Yb)
+ {
+ $X1 = min($Xa,$Xb); $Y1 = min($Ya,$Yb);
+ $X2 = max($Xa,$Xb); $Y2 = max($Ya,$Yb);
+
+ return(array($X1,$Y1,$X2,$Y2));
+ }
+
+ /* Draw a polygon */
+ function drawPolygon($Points,$Format="")
+ {
+ $R = isset($Format["R"]) ? $Format["R"] : 0;
+ $G = isset($Format["G"]) ? $Format["G"] : 0;
+ $B = isset($Format["B"]) ? $Format["B"] : 0;
+ $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
+ $NoFill = isset($Format["NoFill"]) ? $Format["NoFill"] : FALSE;
+ $NoBorder = isset($Format["NoBorder"]) ? $Format["NoBorder"] : FALSE;
+ $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : $R;
+ $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : $G;
+ $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : $B;
+ $BorderAlpha = isset($Format["Alpha"]) ? $Format["Alpha"] : $Alpha / 2;
+ $Surrounding = isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL;
+ $SkipX = isset($Format["SkipX"]) ? $Format["SkipX"] : OUT_OF_SIGHT;
+ $SkipY = isset($Format["SkipY"]) ? $Format["SkipY"] : OUT_OF_SIGHT;
+
+ /* Calling the ImageFilledPolygon() function over the $Points array will round it */
+ $Backup = $Points;
+
+ if ( $Surrounding != NULL ) { $BorderR = $R+$Surrounding; $BorderG = $G+$Surrounding; $BorderB = $B+$Surrounding; }
+
+ if ( $SkipX != OUT_OF_SIGHT ) { $SkipX = floor($SkipX); }
+ if ( $SkipY != OUT_OF_SIGHT ) { $SkipY = floor($SkipY); }
+
+ $RestoreShadow = $this->Shadow;
+ if ( !$NoFill )
+ {
+ if ( $this->Shadow && $this->ShadowX != 0 && $this->ShadowY != 0 )
+ {
+ $this->Shadow = FALSE;
+ for($i=0;$i<=count($Points)-1;$i=$i+2)
+ { $Shadow[] = $Points[$i] + $this->ShadowX; $Shadow[] = $Points[$i+1] + $this->ShadowY; }
+ $this->drawPolygon($Shadow,array("R"=>$this->ShadowR,"G"=>$this->ShadowG,"B"=>$this->ShadowB,"Alpha"=>$this->Shadowa,"NoBorder"=>TRUE));
+ }
+
+ $FillColor = $this->allocateColor($this->Picture,$R,$G,$B,$Alpha);
+
+ if ( count($Points) >= 6 )
+ { ImageFilledPolygon($this->Picture,$Points,count($Points)/2,$FillColor); }
+ }
+
+ if ( !$NoBorder )
+ {
+ $Points = $Backup;
+
+ if ( $NoFill )
+ $BorderSettings = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha);
+ else
+ $BorderSettings = array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha);
+
+ for($i=0;$i<=count($Points)-1;$i=$i+2)
+ {
+ if ( isset($Points[$i+2]) )
+ {
+ if ( !($Points[$i] == $Points[$i+2] && $Points[$i] == $SkipX ) && !($Points[$i+1] == $Points[$i+3] && $Points[$i+1] == $SkipY ) )
+ $this->drawLine($Points[$i],$Points[$i+1],$Points[$i+2],$Points[$i+3],$BorderSettings);
+ }
+ else
+ {
+ if ( !($Points[$i] == $Points[0] && $Points[$i] == $SkipX ) && !($Points[$i+1] == $Points[1] && $Points[$i+1] == $SkipY ) )
+ $this->drawLine($Points[$i],$Points[$i+1],$Points[0],$Points[1],$BorderSettings);
+ }
+ }
+ }
+
+ $this->Shadow = $RestoreShadow;
+ }
+
+ /* Apply AALias correction to the rounded box boundaries */
+ function offsetCorrection($Value,$Mode)
+ {
+ $Value = round($Value,1);
+
+ if ( $Value == 0 && $Mode == 1 ) { return(.9); }
+ if ( $Value == 0 ) { return(0); }
+
+ if ( $Mode == 1)
+ { if ( $Value == 1 ) { return(.9); }; if ( $Value == .1 ) { return(.9); }; if ( $Value == .2 ) { return(.8); }; if ( $Value == .3 ) { return(.8); }; if ( $Value == .4 ) { return(.7); }; if ( $Value == .5 ) { return(.5); }; if ( $Value == .6 ) { return(.8); }; if ( $Value == .7 ) { return(.7); }; if ( $Value == .8 ) { return(.6); }; if ( $Value == .9 ) { return(.9); }; }
+
+ if ( $Mode == 2)
+ { if ( $Value == 1 ) { return(.9); }; if ( $Value == .1 ) { return(.1); }; if ( $Value == .2 ) { return(.2); }; if ( $Value == .3 ) { return(.3); }; if ( $Value == .4 ) { return(.4); }; if ( $Value == .5 ) { return(.5); }; if ( $Value == .6 ) { return(.8); }; if ( $Value == .7 ) { return(.7); }; if ( $Value == .8 ) { return(.8); }; if ( $Value == .9 ) { return(.9); }; }
+
+ if ( $Mode == 3)
+ { if ( $Value == 1 ) { return(.1); }; if ( $Value == .1 ) { return(.1); }; if ( $Value == .2 ) { return(.2); }; if ( $Value == .3 ) { return(.3); }; if ( $Value == .4 ) { return(.4); }; if ( $Value == .5 ) { return(.9); }; if ( $Value == .6 ) { return(.6); }; if ( $Value == .7 ) { return(.7); }; if ( $Value == .8 ) { return(.4); }; if ( $Value == .9 ) { return(.5); }; }
+
+ if ( $Mode == 4)
+ { if ( $Value == 1 ) { return(-1); }; if ( $Value == .1 ) { return(.1); }; if ( $Value == .2 ) { return(.2); }; if ( $Value == .3 ) { return(.3); }; if ( $Value == .4 ) { return(.1); }; if ( $Value == .5 ) { return(-.1); }; if ( $Value == .6 ) { return(.8); }; if ( $Value == .7 ) { return(.1); }; if ( $Value == .8 ) { return(.1); }; if ( $Value == .9 ) { return(.1); }; }
+ }
+
+ /* Draw a rectangle with rounded corners */
+ function drawRoundedRectangle($X1,$Y1,$X2,$Y2,$Radius,$Format="")
+ {
+ $R = isset($Format["R"]) ? $Format["R"] : 0;
+ $G = isset($Format["G"]) ? $Format["G"] : 0;
+ $B = isset($Format["B"]) ? $Format["B"] : 0;
+ $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
+
+ list($X1,$Y1,$X2,$Y2) = $this->fixBoxCoordinates($X1,$Y1,$X2,$Y2);
+
+ if ( $X2 - $X1 < $Radius ) { $Radius = floor((($X2-$X1))/2); }
+ if ( $Y2 - $Y1 < $Radius ) { $Radius = floor((($Y2-$Y1))/2); }
+
+ $Color = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"NoBorder"=>TRUE);
+
+ if ( $Radius <= 0 ) { $this->drawRectangle($X1,$Y1,$X2,$Y2,$Color); return(0); }
+
+ if ( $this->Antialias )
+ {
+ $this->drawLine($X1+$Radius,$Y1,$X2-$Radius,$Y1,$Color);
+ $this->drawLine($X2,$Y1+$Radius,$X2,$Y2-$Radius,$Color);
+ $this->drawLine($X2-$Radius,$Y2,$X1+$Radius,$Y2,$Color);
+ $this->drawLine($X1,$Y1+$Radius,$X1,$Y2-$Radius,$Color);
+ }
+ else
+ {
+ $Color = $this->allocateColor($this->Picture,$R,$G,$B,$Alpha);
+ imageline($this->Picture,$X1+$Radius,$Y1,$X2-$Radius,$Y1,$Color);
+ imageline($this->Picture,$X2,$Y1+$Radius,$X2,$Y2-$Radius,$Color);
+ imageline($this->Picture,$X2-$Radius,$Y2,$X1+$Radius,$Y2,$Color);
+ imageline($this->Picture,$X1,$Y1+$Radius,$X1,$Y2-$Radius,$Color);
+ }
+
+ $Step = 360 / (2 * PI * $Radius);
+ for($i=0;$i<=90;$i=$i+$Step)
+ {
+ $X = cos(($i+180)*PI/180) * $Radius + $X1 + $Radius;
+ $Y = sin(($i+180)*PI/180) * $Radius + $Y1 + $Radius;
+ $this->drawAntialiasPixel($X,$Y,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
+
+ $X = cos(($i+90)*PI/180) * $Radius + $X1 + $Radius;
+ $Y = sin(($i+90)*PI/180) * $Radius + $Y2 - $Radius;
+ $this->drawAntialiasPixel($X,$Y,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
+
+ $X = cos($i*PI/180) * $Radius + $X2 - $Radius;
+ $Y = sin($i*PI/180) * $Radius + $Y2 - $Radius;
+ $this->drawAntialiasPixel($X,$Y,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
+
+ $X = cos(($i+270)*PI/180) * $Radius + $X2 - $Radius;
+ $Y = sin(($i+270)*PI/180) * $Radius + $Y1 + $Radius;
+ $this->drawAntialiasPixel($X,$Y,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
+ }
+ }
+
+ /* Draw a rectangle with rounded corners */
+ function drawRoundedFilledRectangle($X1,$Y1,$X2,$Y2,$Radius,$Format="")
+ {
+ $R = isset($Format["R"]) ? $Format["R"] : 0;
+ $G = isset($Format["G"]) ? $Format["G"] : 0;
+ $B = isset($Format["B"]) ? $Format["B"] : 0;
+ $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : -1;
+ $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : -1;
+ $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : -1;
+ $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
+ $Surrounding = isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL;
+
+ /* Temporary fix for AA issue */
+ $Y1 = floor($Y1); $Y2 = floor($Y2); $X1 = floor($X1); $X2 = floor($X2);
+
+ if ( $Surrounding != NULL ) { $BorderR = $R+$Surrounding; $BorderG = $G+$Surrounding; $BorderB = $B+$Surrounding; }
+ if ( $BorderR == -1 ) { $BorderR = $R; $BorderG = $G; $BorderB = $B; }
+
+ list($X1,$Y1,$X2,$Y2) = $this->fixBoxCoordinates($X1,$Y1,$X2,$Y2);
+
+ if ( $X2 - $X1 < $Radius*2 ) { $Radius = floor((($X2-$X1))/4); }
+ if ( $Y2 - $Y1 < $Radius*2 ) { $Radius = floor((($Y2-$Y1))/4); }
+
+ $RestoreShadow = $this->Shadow;
+ if ( $this->Shadow && $this->ShadowX != 0 && $this->ShadowY != 0 )
+ {
+ $this->Shadow = FALSE;
+ $this->drawRoundedFilledRectangle($X1+$this->ShadowX,$Y1+$this->ShadowY,$X2+$this->ShadowX,$Y2+$this->ShadowY,$Radius,array("R"=>$this->ShadowR,"G"=>$this->ShadowG,"B"=>$this->ShadowB,"Alpha"=>$this->Shadowa));
+ }
+
+ $Color = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"NoBorder"=>TRUE);
+
+ if ( $Radius <= 0 ) { $this->drawFilledRectangle($X1,$Y1,$X2,$Y2,$Color); return(0); }
+
+ $YTop = $Y1+$Radius;
+ $YBottom = $Y2-$Radius;
+
+ $Step = 360 / (2 * PI * $Radius);
+ $Positions = ""; $Radius--; $MinY = ""; $MaxY = "";
+ for($i=0;$i<=90;$i=$i+$Step)
+ {
+ $Xp1 = cos(($i+180)*PI/180) * $Radius + $X1 + $Radius;
+ $Xp2 = cos(((90-$i)+270)*PI/180) * $Radius + $X2 - $Radius;
+ $Yp = floor(sin(($i+180)*PI/180) * $Radius + $YTop);
+ if ( $MinY == "" || $Yp > $MinY ) { $MinY = $Yp; }
+
+ if ( $Xp2 >= floor($X2) ) { $Xp2--; }
+ $Xp1++;
+
+ if ( !isset($Positions[$Yp]) )
+ { $Positions[$Yp]["X1"] = $Xp1; $Positions[$Yp]["X2"] = $Xp2; }
+ else
+ { $Positions[$Yp]["X1"] = ($Positions[$Yp]["X1"]+$Xp1)/2; $Positions[$Yp]["X2"] = ($Positions[$Yp]["X2"]+$Xp2)/2; }
+
+ $Xp1 = cos(($i+90)*PI/180) * $Radius + $X1 + $Radius;
+ $Xp2 = cos((90-$i)*PI/180) * $Radius + $X2 - $Radius;
+ $Yp = floor(sin(($i+90)*PI/180) * $Radius + $YBottom);
+ if ( $MaxY == "" || $Yp < $MaxY ) { $MaxY = $Yp; }
+
+ if ( $Xp2 >= floor($X2) ) { $Xp2--; }
+ $Xp1++;
+
+ if ( !isset($Positions[$Yp]) )
+ { $Positions[$Yp]["X1"] = $Xp1; $Positions[$Yp]["X2"] = $Xp2; }
+ else
+ { $Positions[$Yp]["X1"] = ($Positions[$Yp]["X1"]+$Xp1)/2; $Positions[$Yp]["X2"] = ($Positions[$Yp]["X2"]+$Xp2)/2; }
+ }
+
+ $ManualColor = $this->allocateColor($this->Picture,$R,$G,$B,$Alpha);
+ foreach($Positions as $Yp => $Bounds)
+ {
+ $X1 = $Bounds["X1"]; $X1Dec = $this->getFirstDecimal($X1); if ( $X1Dec != 0 ) { $X1 = floor($X1)+1; }
+ $X2 = $Bounds["X2"]; $X2Dec = $this->getFirstDecimal($X2); if ( $X2Dec != 0 ) { $X2 = floor($X2)-1; }
+ imageline($this->Picture,$X1,$Yp,$X2,$Yp,$ManualColor);
+ }
+ $this->drawFilledRectangle($X1,$MinY+1,floor($X2),$MaxY-1,$Color);
+
+ $Radius++;
+ $this->drawRoundedRectangle($X1,$Y1,$X2+1,$Y2-1,$Radius,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha));
+
+ $this->Shadow = $RestoreShadow;
+ }
+
+ /* Draw a rectangle with rounded corners */
+ function drawRoundedFilledRectangle_deprecated($X1,$Y1,$X2,$Y2,$Radius,$Format="")
+ {
+ $R = isset($Format["R"]) ? $Format["R"] : 0;
+ $G = isset($Format["G"]) ? $Format["G"] : 0;
+ $B = isset($Format["B"]) ? $Format["B"] : 0;
+ $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : -1;
+ $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : -1;
+ $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : -1;
+ $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
+ $Surrounding = isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL;
+
+ if ( $Surrounding != NULL ) { $BorderR = $R+$Surrounding; $BorderG = $G+$Surrounding; $BorderB = $B+$Surrounding; }
+ if ( $BorderR == -1 ) { $BorderR = $R; $BorderG = $G; $BorderB = $B; }
+
+ list($X1,$Y1,$X2,$Y2) = $this->fixBoxCoordinates($X1,$Y1,$X2,$Y2);
+
+ if ( $X2 - $X1 < $Radius ) { $Radius = floor((($X2-$X1)+2)/2); }
+ if ( $Y2 - $Y1 < $Radius ) { $Radius = floor((($Y2-$Y1)+2)/2); }
+
+ $RestoreShadow = $this->Shadow;
+ if ( $this->Shadow && $this->ShadowX != 0 && $this->ShadowY != 0 )
+ {
+ $this->Shadow = FALSE;
+ $this->drawRoundedFilledRectangle($X1+$this->ShadowX,$Y1+$this->ShadowY,$X2+$this->ShadowX,$Y2+$this->ShadowY,$Radius,array("R"=>$this->ShadowR,"G"=>$this->ShadowG,"B"=>$this->ShadowB,"Alpha"=>$this->Shadowa));
+ }
+
+ if ( $this->getFirstDecimal($X2) >= 5 ) { $XOffset2 = 1; } else { $XOffset2 = 0; }
+ if ( $this->getFirstDecimal($X1) <= 5 ) { $XOffset1 = 1; } else { $XOffset1 = 0; }
+
+ if ( !$this->Antialias ) { $XOffset1 = 1; $XOffset2 = 1; }
+
+ $YTop = floor($Y1+$Radius);
+ $YBottom = floor($Y2-$Radius);
+
+ $this->drawFilledRectangle($X1-$XOffset1,$YTop,$X2+$XOffset2,$YBottom,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"NoBorder"=>TRUE));
+
+ $Step = 360 / (2 * PI * $Radius);
+ $Color = $this->allocateColor($this->Picture,$R,$G,$B,$Alpha);
+ $Color2 = $this->allocateColor($this->Picture,255,0,0,$Alpha);
+ $Drawn = "";
+
+ if ( $Alpha < 100 ) { $Drawn[$YTop] = FALSE; }
+ if ( $Alpha < 100 ) { $Drawn[$YBottom] = TRUE; }
+
+ for($i=0;$i<=90;$i=$i+$Step)
+ {
+ $Xp1 = cos(($i+180)*PI/180) * $Radius + $X1 + $Radius;
+ $Xp2 = cos(((90-$i)+270)*PI/180) * $Radius + $X2 - $Radius;
+ $Yp = sin(($i+180)*PI/180) * $Radius + $YTop;
+
+ if ( $this->getFirstDecimal($Xp1) > 5 ) { $XOffset1 = 1; } else { $XOffset1 = 0; }
+ if ( $this->getFirstDecimal($Xp2) > 5 ) { $XOffset2 = 1; } else { $XOffset2 = 0; }
+ if ( $this->getFirstDecimal($Yp) > 5 ) { $YOffset = 1; } else { $YOffset = 0; }
+
+ if ( !isset($Drawn[$Yp+$YOffset]) || $Alpha == 100 )
+ imageline($this->Picture,$Xp1+$XOffset1,$Yp+$YOffset,$Xp2+$XOffset2,$Yp+$YOffset,$Color);
+
+ $Drawn[$Yp+$YOffset] = $Xp2;
+
+ $Xp1 = cos(($i+90)*PI/180) * $Radius + $X1 + $Radius;
+ $Xp2 = cos((90-$i)*PI/180) * $Radius + $X2 - $Radius;
+ $Yp = sin(($i+90)*PI/180) * $Radius + $YBottom;
+
+ if ( $this->getFirstDecimal($Xp1) > 7 ) { $XOffset1 = 1; } else { $XOffset1 = 0; }
+ if ( $this->getFirstDecimal($Xp2) > 7 ) { $XOffset2 = 1; } else { $XOffset2 = 0; }
+ if ( $this->getFirstDecimal($Yp) > 5 ) { $YOffset = 1; } else { $YOffset = 0; }
+
+ if ( !isset($Drawn[$Yp+$YOffset]) || $Alpha == 100 )
+ imageline($this->Picture,$Xp1+$XOffset1,$Yp+$YOffset,$Xp2+$XOffset2,$Yp+$YOffset,$Color);
+
+ $Drawn[$Yp+$YOffset] = $Xp2;
+ }
+
+ $this->drawRoundedRectangle($X1,$Y1,$X2,$Y2,$Radius,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha));
+
+ $this->Shadow = $RestoreShadow;
+ }
+
+ /* Draw a rectangle */
+ function drawRectangle($X1,$Y1,$X2,$Y2,$Format="")
+ {
+ $R = isset($Format["R"]) ? $Format["R"] : 0;
+ $G = isset($Format["G"]) ? $Format["G"] : 0;
+ $B = isset($Format["B"]) ? $Format["B"] : 0;
+ $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
+ $Ticks = isset($Format["Ticks"]) ? $Format["Ticks"] : NULL;
+ $NoAngle = isset($Format["NoAngle"]) ? $Format["NoAngle"] : FALSE;
+
+ if ($X1 > $X2) { list($X1, $X2) = array($X2, $X1); }
+ if ($Y1 > $Y2) { list($Y1, $Y2) = array($Y2, $Y1); }
+
+ if ( $this->Antialias )
+ {
+ if ( $NoAngle )
+ {
+ $this->drawLine($X1+1,$Y1,$X2-1,$Y1,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
+ $this->drawLine($X2,$Y1+1,$X2,$Y2-1,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
+ $this->drawLine($X2-1,$Y2,$X1+1,$Y2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
+ $this->drawLine($X1,$Y1+1,$X1,$Y2-1,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
+ }
+ else
+ {
+ $this->drawLine($X1+1,$Y1,$X2-1,$Y1,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
+ $this->drawLine($X2,$Y1,$X2,$Y2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
+ $this->drawLine($X2-1,$Y2,$X1+1,$Y2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
+ $this->drawLine($X1,$Y1,$X1,$Y2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
+ }
+ }
+ else
+ {
+ $Color = $this->allocateColor($this->Picture,$R,$G,$B,$Alpha);
+ imagerectangle($this->Picture,$X1,$Y1,$X2,$Y2,$Color);
+ }
+ }
+
+ /* Draw a filled rectangle */
+ function drawFilledRectangle($X1,$Y1,$X2,$Y2,$Format="")
+ {
+ $R = isset($Format["R"]) ? $Format["R"] : 0;
+ $G = isset($Format["G"]) ? $Format["G"] : 0;
+ $B = isset($Format["B"]) ? $Format["B"] : 0;
+ $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
+ $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : -1;
+ $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : -1;
+ $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : -1;
+ $BorderAlpha = isset($Format["BorderAlpha"]) ? $Format["BorderAlpha"] : $Alpha;
+ $Surrounding = isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL;
+ $Ticks = isset($Format["Ticks"]) ? $Format["Ticks"] : NULL;
+ $NoAngle = isset($Format["NoAngle"]) ? $Format["NoAngle"] : NULL;
+ $Dash = isset($Format["Dash"]) ? $Format["Dash"] : FALSE;
+ $DashStep = isset($Format["DashStep"]) ? $Format["DashStep"] : 4;
+ $DashR = isset($Format["DashR"]) ? $Format["DashR"] : 0;
+ $DashG = isset($Format["DashG"]) ? $Format["DashG"] : 0;
+ $DashB = isset($Format["DashB"]) ? $Format["DashB"] : 0;
+ $NoBorder = isset($Format["NoBorder"]) ? $Format["NoBorder"] : FALSE;
+
+ if ( $Surrounding != NULL ) { $BorderR = $R+$Surrounding; $BorderG = $G+$Surrounding; $BorderB = $B+$Surrounding; }
+
+ if ($X1 > $X2) { list($X1, $X2) = array($X2, $X1); }
+ if ($Y1 > $Y2) { list($Y1, $Y2) = array($Y2, $Y1); }
+
+ $RestoreShadow = $this->Shadow;
+ if ( $this->Shadow && $this->ShadowX != 0 && $this->ShadowY != 0 )
+ {
+ $this->Shadow = FALSE;
+ $this->drawFilledRectangle($X1+$this->ShadowX,$Y1+$this->ShadowY,$X2+$this->ShadowX,$Y2+$this->ShadowY,array("R"=>$this->ShadowR,"G"=>$this->ShadowG,"B"=>$this->ShadowB,"Alpha"=>$this->Shadowa,"Ticks"=>$Ticks,"NoAngle"=>$NoAngle));
+ }
+
+ $Color = $this->allocateColor($this->Picture,$R,$G,$B,$Alpha);
+ if ( $NoAngle )
+ {
+ imagefilledrectangle($this->Picture,ceil($X1)+1,ceil($Y1),floor($X2)-1,floor($Y2),$Color);
+ imageline($this->Picture,ceil($X1),ceil($Y1)+1,ceil($X1),floor($Y2)-1,$Color);
+ imageline($this->Picture,floor($X2),ceil($Y1)+1,floor($X2),floor($Y2)-1,$Color);
+ }
+ else
+ imagefilledrectangle($this->Picture,ceil($X1),ceil($Y1),floor($X2),floor($Y2),$Color);
+
+ if ( $Dash )
+ {
+ if ( $BorderR != -1 ) { $iX1=$X1+1; $iY1=$Y1+1; $iX2=$X2-1; $iY2=$Y2-1; } else { $iX1=$X1; $iY1=$Y1; $iX2=$X2; $iY2=$Y2; }
+
+ $Color = $this->allocateColor($this->Picture,$DashR,$DashG,$DashB,$Alpha);
+ $Y=$iY1-$DashStep;
+ for($X=$iX1; $X<=$iX2+($iY2-$iY1); $X=$X+$DashStep)
+ {
+ $Y=$Y+$DashStep;
+ if ( $X > $iX2 ) { $Xa = $X-($X-$iX2); $Ya = $iY1+($X-$iX2); } else { $Xa = $X; $Ya = $iY1; }
+ if ( $Y > $iY2 ) { $Xb = $iX1+($Y-$iY2); $Yb = $Y-($Y-$iY2); } else { $Xb = $iX1; $Yb = $Y; }
+ imageline($this->Picture,$Xa,$Ya,$Xb,$Yb,$Color);
+ }
+ }
+
+ if ( $this->Antialias && !$NoBorder )
+ {
+ if ( $X1 < ceil($X1) )
+ {
+ $AlphaA = $Alpha * (ceil($X1) - $X1);
+ $Color = $this->allocateColor($this->Picture,$R,$G,$B,$AlphaA);
+ imageline($this->Picture,ceil($X1)-1,ceil($Y1),ceil($X1)-1,floor($Y2),$Color);
+ }
+
+ if ( $Y1 < ceil($Y1) )
+ {
+ $AlphaA = $Alpha * (ceil($Y1) - $Y1);
+ $Color = $this->allocateColor($this->Picture,$R,$G,$B,$AlphaA);
+ imageline($this->Picture,ceil($X1),ceil($Y1)-1,floor($X2),ceil($Y1)-1,$Color);
+ }
+
+ if ( $X2 > floor($X2) )
+ {
+ $AlphaA = $Alpha * (.5-($X2 - floor($X2)));
+ $Color = $this->allocateColor($this->Picture,$R,$G,$B,$AlphaA);
+ imageline($this->Picture,floor($X2)+1,ceil($Y1),floor($X2)+1,floor($Y2),$Color);
+ }
+
+ if ( $Y2 > floor($Y2) )
+ {
+ $AlphaA = $Alpha * (.5-($Y2 - floor($Y2)));
+ $Color = $this->allocateColor($this->Picture,$R,$G,$B,$AlphaA);
+ imageline($this->Picture,ceil($X1),floor($Y2)+1,floor($X2),floor($Y2)+1,$Color);
+ }
+ }
+
+ if ( $BorderR != -1 )
+ $this->drawRectangle($X1,$Y1,$X2,$Y2,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha,"Ticks"=>$Ticks,"NoAngle"=>$NoAngle));
+
+ $this->Shadow = $RestoreShadow;
+ }
+
+ /* Draw a rectangular marker of the specified size */
+ function drawRectangleMarker($X,$Y,$Format="")
+ {
+ $Size = isset($Format["Size"]) ? $Format["Size"] : 4;
+
+ $HalfSize = floor($Size/2);
+ $this->drawFilledRectangle($X-$HalfSize,$Y-$HalfSize,$X+$HalfSize,$Y+$HalfSize,$Format);
+ }
+
+ /* Drawn a spline based on the bezier function */
+ function drawSpline($Coordinates,$Format="")
+ {
+ $R = isset($Format["R"]) ? $Format["R"] : 0;
+ $G = isset($Format["G"]) ? $Format["G"] : 0;
+ $B = isset($Format["B"]) ? $Format["B"] : 0;
+ $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
+ $Force = isset($Format["Force"]) ? $Format["Force"] : 30;
+ $Forces = isset($Format["Forces"]) ? $Format["Forces"] : NULL;
+ $ShowC = isset($Format["ShowControl"]) ? $Format["ShowControl"] : FALSE;
+ $Ticks = isset($Format["Ticks"]) ? $Format["Ticks"] : NULL;
+ $PathOnly = isset($Format["PathOnly"]) ? $Format["PathOnly"] : FALSE;
+ $Weight = isset($Format["Weight"]) ? $Format["Weight"] : NULL;
+
+ $Cpt = NULL; $Mode = NULL; $Result = "";
+ for($i=1;$i<=count($Coordinates)-1;$i++)
+ {
+ $X1 = $Coordinates[$i-1][0]; $Y1 = $Coordinates[$i-1][1];
+ $X2 = $Coordinates[$i][0]; $Y2 = $Coordinates[$i][1];
+
+ if ( $Forces != NULL ) { $Force = $Forces[$i]; }
+
+ /* First segment */
+ if ( $i == 1 )
+ { $Xv1 = $X1; $Yv1 = $Y1; }
+ else
+ {
+ $Angle1 = $this->getAngle($XLast,$YLast,$X1,$Y1);
+ $Angle2 = $this->getAngle($X1,$Y1,$X2,$Y2);
+ $XOff = cos($Angle2 * PI / 180) * $Force + $X1;
+ $YOff = sin($Angle2 * PI / 180) * $Force + $Y1;
+
+ $Xv1 = cos($Angle1 * PI / 180) * $Force + $XOff;
+ $Yv1 = sin($Angle1 * PI / 180) * $Force + $YOff;
+ }
+
+ /* Last segment */
+ if ( $i == count($Coordinates)-1 )
+ { $Xv2 = $X2; $Yv2 = $Y2; }
+ else
+ {
+ $Angle1 = $this->getAngle($X2,$Y2,$Coordinates[$i+1][0],$Coordinates[$i+1][1]);
+ $Angle2 = $this->getAngle($X1,$Y1,$X2,$Y2);
+ $XOff = cos(($Angle2+180) * PI / 180) * $Force + $X2;
+ $YOff = sin(($Angle2+180) * PI / 180) * $Force + $Y2;
+
+ $Xv2 = cos(($Angle1+180) * PI / 180) * $Force + $XOff;
+ $Yv2 = sin(($Angle1+180) * PI / 180) * $Force + $YOff;
+ }
+
+ $Path = $this->drawBezier($X1,$Y1,$X2,$Y2,$Xv1,$Yv1,$Xv2,$Yv2,$Format);
+ if ($PathOnly) { $Result[] = $Path; }
+
+ $XLast = $X1; $YLast = $Y1;
+ }
+
+ return($Result);
+ }
+
+ /* Draw a bezier curve with two controls points */
+ function drawBezier($X1,$Y1,$X2,$Y2,$Xv1,$Yv1,$Xv2,$Yv2,$Format="")
+ {
+ $R = isset($Format["R"]) ? $Format["R"] : 0;
+ $G = isset($Format["G"]) ? $Format["G"] : 0;
+ $B = isset($Format["B"]) ? $Format["B"] : 0;
+ $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
+ $ShowC = isset($Format["ShowControl"]) ? $Format["ShowControl"] : FALSE;
+ $Segments = isset($Format["Segments"]) ? $Format["Segments"] : NULL;
+ $Ticks = isset($Format["Ticks"]) ? $Format["Ticks"] : NULL;
+ $NoDraw = isset($Format["NoDraw"]) ? $Format["NoDraw"] : FALSE;
+ $PathOnly = isset($Format["PathOnly"]) ? $Format["PathOnly"] : FALSE;
+ $Weight = isset($Format["Weight"]) ? $Format["Weight"] : NULL;
+ $DrawArrow = isset($Format["DrawArrow"]) ? $Format["DrawArrow"] : FALSE;
+ $ArrowSize = isset($Format["ArrowSize"]) ? $Format["ArrowSize"] : 10;
+ $ArrowRatio = isset($Format["ArrowRatio"]) ? $Format["ArrowRatio"] : .5;
+ $ArrowTwoHeads = isset($Format["ArrowTwoHeads"]) ? $Format["ArrowTwoHeads"] : FALSE;
+
+ if ( $Segments == NULL )
+ {
+ $Length = $this->getLength($X1,$Y1,$X2,$Y2);
+ $Precision = ($Length*125)/1000;
+ }
+ else
+ $Precision = $Segments;
+
+ $P[0]["X"] = $X1; $P[0]["Y"] = $Y1;
+ $P[1]["X"] = $Xv1; $P[1]["Y"] = $Yv1;
+ $P[2]["X"] = $Xv2; $P[2]["Y"] = $Yv2;
+ $P[3]["X"] = $X2; $P[3]["Y"] = $Y2;
+
+ /* Compute the bezier points */
+ $Q = ""; $ID = 0; $Path = "";
+ for($i=0;$i<=$Precision;$i=$i+1)
+ {
+ $u = $i / $Precision;
+
+ $C = "";
+ $C[0] = (1 - $u) * (1 - $u) * (1 - $u);
+ $C[1] = ($u * 3) * (1 - $u) * (1 - $u);
+ $C[2] = 3 * $u * $u * (1 - $u);
+ $C[3] = $u * $u * $u;
+
+ for($j=0;$j<=3;$j++)
+ {
+ if ( !isset($Q[$ID]) ) { $Q[$ID] = ""; }
+ if ( !isset($Q[$ID]["X"]) ) { $Q[$ID]["X"] = 0; }
+ if ( !isset($Q[$ID]["Y"]) ) { $Q[$ID]["Y"] = 0; }
+
+ $Q[$ID]["X"] = $Q[$ID]["X"] + $P[$j]["X"] * $C[$j];
+ $Q[$ID]["Y"] = $Q[$ID]["Y"] + $P[$j]["Y"] * $C[$j];
+ }
+ $ID++;
+ }
+ $Q[$ID]["X"] = $X2; $Q[$ID]["Y"] = $Y2;
+
+ if ( !$NoDraw )
+ {
+ /* Display the control points */
+ if ( $ShowC && !$PathOnly )
+ {
+ $Xv1 = floor($Xv1); $Yv1 = floor($Yv1); $Xv2 = floor($Xv2); $Yv2 = floor($Yv2);
+
+ $this->drawLine($X1,$Y1,$X2,$Y2,array("R"=>0,"G"=>0,"B"=>0,"Alpha"=>30));
+
+ $MyMarkerSettings = array("R"=>255,"G"=>0,"B"=>0,"BorderR"=>255,"BorderB"=>255,"BorderG"=>255,"Size"=>4);
+ $this->drawRectangleMarker($Xv1,$Yv1,$MyMarkerSettings);
+ $this->drawText($Xv1+4,$Yv1,"v1");
+ $MyMarkerSettings = array("R"=>0,"G"=>0,"B"=>255,"BorderR"=>255,"BorderB"=>255,"BorderG"=>255,"Size"=>4);
+ $this->drawRectangleMarker($Xv2,$Yv2,$MyMarkerSettings);
+ $this->drawText($Xv2+4,$Yv2,"v2");
+ }
+
+ /* Draw the bezier */
+ $LastX = NULL; $LastY = NULL; $Cpt = NULL; $Mode = NULL; $ArrowS = NULL;
+ foreach ($Q as $Key => $Point)
+ {
+ $X = $Point["X"]; $Y = $Point["Y"];
+
+ /* Get the first segment */
+ if ( $ArrowS == NULL && $LastX != NULL && $LastY != NULL )
+ { $ArrowS["X2"] = $LastX; $ArrowS["Y2"] = $LastY; $ArrowS["X1"] = $X; $ArrowS["Y1"] = $Y; }
+
+ if ( $LastX != NULL && $LastY != NULL && !$PathOnly)
+ list($Cpt,$Mode) = $this->drawLine($LastX,$LastY,$X,$Y,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Cpt"=>$Cpt,"Mode"=>$Mode,"Weight"=>$Weight));
+
+ /* Get the last segment */
+ $ArrowE["X1"] = $LastX; $ArrowE["Y1"] = $LastY; $ArrowE["X2"] = $X; $ArrowE["Y2"] = $Y;
+
+ $LastX = $X; $LastY = $Y;
+ }
+
+ if ( $DrawArrow && !$PathOnly )
+ {
+ $ArrowSettings = array("FillR"=>$R,"FillG"=>$G,"FillB"=>$B,"Alpha"=>$Alpha,"Size"=>$ArrowSize,"Ratio"=>$ArrowRatio);
+ if ( $ArrowTwoHeads )
+ $this->drawArrow($ArrowS["X1"],$ArrowS["Y1"],$ArrowS["X2"],$ArrowS["Y2"],$ArrowSettings);
+
+ $this->drawArrow($ArrowE["X1"],$ArrowE["Y1"],$ArrowE["X2"],$ArrowE["Y2"],$ArrowSettings);
+ }
+ }
+ return($Q);
+ }
+
+ /* Draw a line between two points */
+ function drawLine($X1,$Y1,$X2,$Y2,$Format="")
+ {
+ $R = isset($Format["R"]) ? $Format["R"] : 0;
+ $G = isset($Format["G"]) ? $Format["G"] : 0;
+ $B = isset($Format["B"]) ? $Format["B"] : 0;
+ $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
+ $Ticks = isset($Format["Ticks"]) ? $Format["Ticks"] : NULL;
+ $Cpt = isset($Format["Cpt"]) ? $Format["Cpt"] : 1;
+ $Mode = isset($Format["Mode"]) ? $Format["Mode"] : 1;
+ $Weight = isset($Format["Weight"]) ? $Format["Weight"] : NULL;
+ $Threshold = isset($Format["Threshold"]) ? $Format["Threshold"] : NULL;
+
+ if ( $this->Antialias == FALSE && $Ticks == NULL )
+ {
+ if ( $this->Shadow && $this->ShadowX != 0 && $this->ShadowY != 0 )
+ {
+ $ShadowColor = $this->allocateColor($this->Picture,$this->ShadowR,$this->ShadowG,$this->ShadowB,$this->Shadowa);
+ imageline($this->Picture,$X1+$this->ShadowX,$Y1+$this->ShadowY,$X2+$this->ShadowX,$Y2+$this->ShadowY,$ShadowColor);
+ }
+
+ $Color = $this->allocateColor($this->Picture,$R,$G,$B,$Alpha);
+ imageline($this->Picture,$X1,$Y1,$X2,$Y2,$Color);
+ return(0);
+ }
+
+ $Distance = sqrt(($X2-$X1)*($X2-$X1)+($Y2-$Y1)*($Y2-$Y1));
+ if ( $Distance == 0 ) { return(-1); }
+
+ /* Derivative algorithm for overweighted lines, re-route to polygons primitives */
+ if ( $Weight != NULL )
+ {
+ $Angle = $this->getAngle($X1,$Y1,$X2,$Y2);
+ $PolySettings = array ("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"BorderAlpha"=>$Alpha);
+
+ if ( $Ticks == NULL )
+ {
+ $Points = "";
+ $Points[] = cos(deg2rad($Angle-90)) * $Weight + $X1; $Points[] = sin(deg2rad($Angle-90)) * $Weight + $Y1;
+ $Points[] = cos(deg2rad($Angle+90)) * $Weight + $X1; $Points[] = sin(deg2rad($Angle+90)) * $Weight + $Y1;
+ $Points[] = cos(deg2rad($Angle+90)) * $Weight + $X2; $Points[] = sin(deg2rad($Angle+90)) * $Weight + $Y2;
+ $Points[] = cos(deg2rad($Angle-90)) * $Weight + $X2; $Points[] = sin(deg2rad($Angle-90)) * $Weight + $Y2;
+
+ $this->drawPolygon($Points,$PolySettings);
+ }
+ else
+ {
+ for($i=0;$i<=$Distance;$i=$i+$Ticks*2)
+ {
+ $Xa = (($X2-$X1)/$Distance) * $i + $X1; $Ya = (($Y2-$Y1)/$Distance) * $i + $Y1;
+ $Xb = (($X2-$X1)/$Distance) * ($i+$Ticks) + $X1; $Yb = (($Y2-$Y1)/$Distance) * ($i+$Ticks) + $Y1;
+
+ $Points = "";
+ $Points[] = cos(deg2rad($Angle-90)) * $Weight + $Xa; $Points[] = sin(deg2rad($Angle-90)) * $Weight + $Ya;
+ $Points[] = cos(deg2rad($Angle+90)) * $Weight + $Xa; $Points[] = sin(deg2rad($Angle+90)) * $Weight + $Ya;
+ $Points[] = cos(deg2rad($Angle+90)) * $Weight + $Xb; $Points[] = sin(deg2rad($Angle+90)) * $Weight + $Yb;
+ $Points[] = cos(deg2rad($Angle-90)) * $Weight + $Xb; $Points[] = sin(deg2rad($Angle-90)) * $Weight + $Yb;
+
+ $this->drawPolygon($Points,$PolySettings);
+ }
+ }
+
+ return(1);
+ }
+
+ $XStep = ($X2-$X1) / $Distance;
+ $YStep = ($Y2-$Y1) / $Distance;
+
+ for($i=0;$i<=$Distance;$i++)
+ {
+ $X = $i * $XStep + $X1;
+ $Y = $i * $YStep + $Y1;
+
+ $Color = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha);
+
+ if ( $Threshold != NULL )
+ {
+ foreach($Threshold as $Key => $Parameters)
+ {
+ if ( $Y <= $Parameters["MinX"] && $Y >= $Parameters["MaxX"])
+ {
+ if ( isset($Parameters["R"]) ) { $RT = $Parameters["R"]; } else { $RT = 0; }
+ if ( isset($Parameters["G"]) ) { $GT = $Parameters["G"]; } else { $GT = 0; }
+ if ( isset($Parameters["B"]) ) { $BT = $Parameters["B"]; } else { $BT = 0; }
+ if ( isset($Parameters["Alpha"]) ) { $AlphaT = $Parameters["Alpha"]; } else { $AlphaT = 0; }
+ $Color = array("R"=>$RT,"G"=>$GT,"B"=>$BT,"Alpha"=>$AlphaT);
+ }
+ }
+ }
+
+ if ( $Ticks != NULL )
+ {
+ if ( $Cpt % $Ticks == 0 )
+ { $Cpt = 0; if ( $Mode == 1 ) { $Mode = 0; } else { $Mode = 1; } }
+
+ if ( $Mode == 1 )
+ $this->drawAntialiasPixel($X,$Y,$Color);
+
+ $Cpt++;
+ }
+ else
+ $this->drawAntialiasPixel($X,$Y,$Color);
+ }
+
+ return(array($Cpt,$Mode));
+ }
+
+ /* Draw a circle */
+ function drawCircle($Xc,$Yc,$Height,$Width,$Format="")
+ {
+ $R = isset($Format["R"]) ? $Format["R"] : 0;
+ $G = isset($Format["G"]) ? $Format["G"] : 0;
+ $B = isset($Format["B"]) ? $Format["B"] : 0;
+ $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
+ $Ticks = isset($Format["Ticks"]) ? $Format["Ticks"] : NULL;
+
+ $Height = abs($Height);
+ $Width = abs($Width);
+
+ if ( $Height == 0 ) { $Height = 1; }
+ if ( $Width == 0 ) { $Width = 1; }
+ $Xc = floor($Xc); $Yc = floor($Yc);
+
+ $RestoreShadow = $this->Shadow;
+ if ( $this->Shadow && $this->ShadowX != 0 && $this->ShadowY != 0 )
+ {
+ $this->Shadow = FALSE;
+ $this->drawCircle($Xc+$this->ShadowX,$Yc+$this->ShadowY,$Height,$Width,array("R"=>$this->ShadowR,"G"=>$this->ShadowG,"B"=>$this->ShadowB,"Alpha"=>$this->Shadowa,"Ticks"=>$Ticks));
+ }
+
+ if ( $Width == 0 ) { $Width = $Height; }
+ if ( $R < 0 ) { $R = 0; } if ( $R > 255 ) { $R = 255; }
+ if ( $G < 0 ) { $G = 0; } if ( $G > 255 ) { $G = 255; }
+ if ( $B < 0 ) { $B = 0; } if ( $B > 255 ) { $B = 255; }
+
+ $Step = 360 / (2 * PI * max($Width,$Height));
+ $Mode = 1; $Cpt = 1;
+ for($i=0;$i<=360;$i=$i+$Step)
+ {
+ $X = cos($i*PI/180) * $Height + $Xc;
+ $Y = sin($i*PI/180) * $Width + $Yc;
+
+ if ( $Ticks != NULL )
+ {
+ if ( $Cpt % $Ticks == 0 )
+ { $Cpt = 0; if ( $Mode == 1 ) { $Mode = 0; } else { $Mode = 1; } }
+
+ if ( $Mode == 1 )
+ $this->drawAntialiasPixel($X,$Y,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
+
+ $Cpt++;
+ }
+ else
+ $this->drawAntialiasPixel($X,$Y,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
+
+ }
+ $this->Shadow = $RestoreShadow;
+ }
+
+ /* Draw a filled circle */
+ function drawFilledCircle($X,$Y,$Radius,$Format="")
+ {
+ $R = isset($Format["R"]) ? $Format["R"] : 0;
+ $G = isset($Format["G"]) ? $Format["G"] : 0;
+ $B = isset($Format["B"]) ? $Format["B"] : 0;
+ $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
+ $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : -1;
+ $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : -1;
+ $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : -1;
+ $BorderAlpha = isset($Format["BorderAlpha"]) ? $Format["BorderAlpha"] : $Alpha;
+ $Ticks = isset($Format["Ticks"]) ? $Format["Ticks"] : NULL;
+ $Surrounding = isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL;
+
+ if ( $Radius == 0 ) { $Radius = 1; }
+ if ( $Surrounding != NULL ) { $BorderR = $R+$Surrounding; $BorderG = $G+$Surrounding; $BorderB = $B+$Surrounding; }
+ $X = floor($X); $Y = floor($Y);
+
+ $Radius = abs($Radius);
+
+ $RestoreShadow = $this->Shadow;
+ if ( $this->Shadow && $this->ShadowX != 0 && $this->ShadowY != 0 )
+ {
+ $this->Shadow = FALSE;
+ $this->drawFilledCircle($X+$this->ShadowX,$Y+$this->ShadowY,$Radius,array("R"=>$this->ShadowR,"G"=>$this->ShadowG,"B"=>$this->ShadowB,"Alpha"=>$this->Shadowa,"Ticks"=>$Ticks));
+ }
+
+ $this->Mask = "";
+ $Color = $this->allocateColor($this->Picture,$R,$G,$B,$Alpha);
+ for ($i=0; $i<=$Radius*2; $i++)
+ {
+ $Slice = sqrt($Radius * $Radius - ($Radius - $i) * ($Radius - $i));
+ $XPos = floor($Slice);
+ $YPos = $Y + $i - $Radius;
+ $AAlias = $Slice - floor($Slice);
+
+ $this->Mask[$X-$XPos][$YPos] = TRUE;
+ $this->Mask[$X+$XPos][$YPos] = TRUE;
+ imageline($this->Picture,$X-$XPos,$YPos,$X+$XPos,$YPos,$Color);
+ }
+ if ( $this->Antialias )
+ $this->drawCircle($X,$Y,$Radius,$Radius,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
+
+ $this->Mask = "";
+
+ if ( $BorderR != -1 )
+ $this->drawCircle($X,$Y,$Radius,$Radius,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha,"Ticks"=>$Ticks));
+
+ $this->Shadow = $RestoreShadow;
+ }
+
+ /* Write text */
+ function drawText($X,$Y,$Text,$Format="")
+ {
+ $R = isset($Format["R"]) ? $Format["R"] : $this->FontColorR;
+ $G = isset($Format["G"]) ? $Format["G"] : $this->FontColorG;
+ $B = isset($Format["B"]) ? $Format["B"] : $this->FontColorB;
+ $Angle = isset($Format["Angle"]) ? $Format["Angle"] : 0;
+ $Align = isset($Format["Align"]) ? $Format["Align"] : TEXT_ALIGN_BOTTOMLEFT;
+ $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : $this->FontColorA;
+ $FontName = isset($Format["FontName"]) ? $Format["FontName"] : $this->FontName;
+ $FontSize = isset($Format["FontSize"]) ? $Format["FontSize"] : $this->FontSize;
+ $ShowOrigine = isset($Format["ShowOrigine"]) ? $Format["ShowOrigine"] : FALSE;
+ $TOffset = isset($Format["TOffset"]) ? $Format["TOffset"] : 2;
+ $DrawBox = isset($Format["DrawBox"]) ? $Format["DrawBox"] : FALSE;
+ $DrawBoxBorder = isset($Format["DrawBoxBorder"]) ? $Format["DrawBoxBorder"] : TRUE;
+ $BorderOffset = isset($Format["BorderOffset"]) ? $Format["BorderOffset"] : 6;
+ $BoxRounded = isset($Format["BoxRounded"]) ? $Format["BoxRounded"] : FALSE;
+ $RoundedRadius = isset($Format["RoundedRadius"]) ? $Format["RoundedRadius"] : 6;
+ $BoxR = isset($Format["BoxR"]) ? $Format["BoxR"] : 255;
+ $BoxG = isset($Format["BoxG"]) ? $Format["BoxG"] : 255;
+ $BoxB = isset($Format["BoxB"]) ? $Format["BoxB"] : 255;
+ $BoxAlpha = isset($Format["BoxAlpha"]) ? $Format["BoxAlpha"] : 50;
+ $BoxSurrounding = isset($Format["BoxSurrounding"]) ? $Format["BoxSurrounding"] : "";
+ $BoxBorderR = isset($Format["BoxR"]) ? $Format["BoxR"] : 0;
+ $BoxBorderG = isset($Format["BoxG"]) ? $Format["BoxG"] : 0;
+ $BoxBorderB = isset($Format["BoxB"]) ? $Format["BoxB"] : 0;
+ $BoxBorderAlpha = isset($Format["BoxAlpha"]) ? $Format["BoxAlpha"] : 50;
+ $NoShadow = isset($Format["NoShadow"]) ? $Format["NoShadow"] : FALSE;
+
+ $Shadow = $this->Shadow;
+ if ( $NoShadow ) { $this->Shadow = FALSE; }
+
+ if ( $BoxSurrounding != "" ) { $BoxBorderR = $BoxR - $BoxSurrounding; $BoxBorderG = $BoxG - $BoxSurrounding; $BoxBorderB = $BoxB - $BoxSurrounding; $BoxBorderAlpha = $Boxalpha; }
+
+ if ( $ShowOrigine )
+ {
+ $MyMarkerSettings = array("R"=>255,"G"=>0,"B"=>0,"BorderR"=>255,"BorderB"=>255,"BorderG"=>255,"Size"=>4);
+ $this->drawRectangleMarker($X,$Y,$MyMarkerSettings);
+ }
+
+ $TxtPos = $this->getTextBox($X,$Y,$FontName,$FontSize,$Angle,$Text);
+
+ if ( $DrawBox && ($Angle == 0 || $Angle == 90 || $Angle == 180 || $Angle == 270))
+ {
+ $T[0]["X"]=0;$T[0]["Y"]=0;$T[1]["X"]=0;$T[1]["Y"]=0;$T[2]["X"]=0;$T[2]["Y"]=0;$T[3]["X"]=0;$T[3]["Y"]=0;
+ if ( $Angle == 0 ) { $T[0]["X"]=-$TOffset;$T[0]["Y"]=$TOffset;$T[1]["X"]=$TOffset;$T[1]["Y"]=$TOffset;$T[2]["X"]=$TOffset;$T[2]["Y"]=-$TOffset;$T[3]["X"]=-$TOffset;$T[3]["Y"]=-$TOffset; }
+
+ $X1 = min($TxtPos[0]["X"],$TxtPos[1]["X"],$TxtPos[2]["X"],$TxtPos[3]["X"]) - $BorderOffset + 3;
+ $Y1 = min($TxtPos[0]["Y"],$TxtPos[1]["Y"],$TxtPos[2]["Y"],$TxtPos[3]["Y"]) - $BorderOffset;
+ $X2 = max($TxtPos[0]["X"],$TxtPos[1]["X"],$TxtPos[2]["X"],$TxtPos[3]["X"]) + $BorderOffset + 3;
+ $Y2 = max($TxtPos[0]["Y"],$TxtPos[1]["Y"],$TxtPos[2]["Y"],$TxtPos[3]["Y"]) + $BorderOffset - 3;
+
+ $X1 = $X1 - $TxtPos[$Align]["X"] + $X + $T[0]["X"];
+ $Y1 = $Y1 - $TxtPos[$Align]["Y"] + $Y + $T[0]["Y"];
+ $X2 = $X2 - $TxtPos[$Align]["X"] + $X + $T[0]["X"];
+ $Y2 = $Y2 - $TxtPos[$Align]["Y"] + $Y + $T[0]["Y"];
+
+ $Settings = array("R"=>$BoxR,"G"=>$BoxG,"B"=>$BoxB,"Alpha"=>$BoxAlpha,"BorderR"=>$BoxBorderR,"BorderG"=>$BoxBorderG,"BorderB"=>$BoxBorderB,"BorderAlpha"=>$BoxBorderAlpha);
+
+ if ( $BoxRounded )
+ { $this->drawRoundedFilledRectangle($X1,$Y1,$X2,$Y2,$RoundedRadius,$Settings); }
+ else
+ { $this->drawFilledRectangle($X1,$Y1,$X2,$Y2,$Settings); }
+ }
+
+ $X = $X - $TxtPos[$Align]["X"] + $X;
+ $Y = $Y - $TxtPos[$Align]["Y"] + $Y;
+
+ if ( $this->Shadow && $this->ShadowX != 0 && $this->ShadowY != 0 )
+ {
+ $C_ShadowColor = $this->allocateColor($this->Picture,$this->ShadowR,$this->ShadowG,$this->ShadowB,$this->Shadowa);
+ imagettftext($this->Picture,$FontSize,$Angle,$X+$this->ShadowX,$Y+$this->ShadowY,$C_ShadowColor,$FontName,$Text);
+ }
+
+ $C_TextColor = $this->AllocateColor($this->Picture,$R,$G,$B,$Alpha);
+ imagettftext($this->Picture,$FontSize,$Angle,$X,$Y,$C_TextColor,$FontName,$Text);
+
+ $this->Shadow = $Shadow;
+
+ return($TxtPos);
+ }
+
+ /* Draw a gradient within a defined area */
+ function drawGradientArea($X1,$Y1,$X2,$Y2,$Direction,$Format="")
+ {
+ $StartR = isset($Format["StartR"]) ? $Format["StartR"] : 90;
+ $StartG = isset($Format["StartG"]) ? $Format["StartG"] : 90;
+ $StartB = isset($Format["StartB"]) ? $Format["StartB"] : 90;
+ $EndR = isset($Format["EndR"]) ? $Format["EndR"] : 0;
+ $EndG = isset($Format["EndG"]) ? $Format["EndG"] : 0;
+ $EndB = isset($Format["EndB"]) ? $Format["EndB"] : 0;
+ $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
+ $Levels = isset($Format["Levels"]) ? $Format["Levels"] : NULL;
+
+ $Shadow = $this->Shadow;
+ $this->Shadow = FALSE;
+
+ if ( $StartR == $EndR && $StartG == $EndG && $StartB == $EndB )
+ {
+ $this->drawFilledRectangle($X1,$Y1,$X2,$Y2,array("R"=>$StartR,"G"=>$StartG,"B"=>$StartB,"Alpha"=>$Alpha));
+ return(0);
+ }
+
+ if ( $Levels != NULL )
+ { $EndR=$StartR+$Levels; $EndG=$StartG+$Levels; $EndB=$StartB+$Levels; }
+
+ if ($X1 > $X2) { list($X1, $X2) = array($X2, $X1); }
+ if ($Y1 > $Y2) { list($Y1, $Y2) = array($Y2, $Y1); }
+
+ if ( $Direction == DIRECTION_VERTICAL ) { $Width = abs($Y2-$Y1); }
+ if ( $Direction == DIRECTION_HORIZONTAL ) { $Width = abs($X2-$X1); }
+
+ $Step = max(abs($EndR-$StartR),abs($EndG-$StartG),abs($EndB-$StartB));
+ $StepSize = $Width/$Step;
+ $RStep = ($EndR-$StartR)/$Step;
+ $GStep = ($EndG-$StartG)/$Step;
+ $BStep = ($EndB-$StartB)/$Step;
+
+ $R=$StartR;$G=$StartG;$B=$StartB;
+ switch($Direction)
+ {
+ case DIRECTION_VERTICAL:
+ $StartY = $Y1; $EndY = floor($Y2)+1; $LastY2 = $StartY;
+ for($i=0;$i<=$Step;$i++)
+ {
+ $Y2 = floor($StartY + ($i * $StepSize));
+
+ if ($Y2 > $EndY) { $Y2 = $EndY; }
+ if (($Y1 != $Y2 && $Y1 < $Y2) || $Y2 == $EndY)
+ {
+ $Color = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha);
+ $this->drawFilledRectangle($X1,$Y1,$X2,$Y2,$Color);
+ $LastY2 = max($LastY2,$Y2);
+ $Y1 = $Y2+1;
+ }
+ $R = $R + $RStep; $G = $G + $GStep; $B = $B + $BStep;
+ }
+ if ( $LastY2 < $EndY && isset($Color)) { for ($i=$LastY2+1;$i<=$EndY;$i++) { $this->drawLine($X1,$i,$X2,$i,$Color); } }
+ break;
+
+ case DIRECTION_HORIZONTAL:
+ $StartX = $X1; $EndX = $X2;
+ for($i=0;$i<=$Step;$i++)
+ {
+ $X2 = floor($StartX + ($i * $StepSize));
+
+ if ($X2 > $EndX) { $X2 = $EndX; }
+ if (($X1 != $X2 && $X1 < $X2) || $X2 == $EndX)
+ {
+ $Color = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha);
+ $this->drawFilledRectangle($X1,$Y1,$X2,$Y2,$Color);
+ $X1 = $X2+1;
+ }
+ $R = $R + $RStep; $G = $G + $GStep; $B = $B + $BStep;
+ }
+ if ( $X2 < $EndX && isset($Color)) { $this->drawFilledRectangle($X2,$Y1,$EndX,$Y2,$Color); }
+ break;
+ }
+
+ $this->Shadow = $Shadow;
+
+ }
+
+ /* Draw an aliased pixel */
+ function drawAntialiasPixel($X,$Y,$Format="")
+ {
+ $R = isset($Format["R"]) ? $Format["R"] : 0;
+ $G = isset($Format["G"]) ? $Format["G"] : 0;
+ $B = isset($Format["B"]) ? $Format["B"] : 0;
+ $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
+
+ if ( $X < 0 || $Y < 0 || $X >= $this->XSize || $Y >= $this->YSize )
+ return(-1);
+
+ if ( $R < 0 ) { $R = 0; } if ( $R > 255 ) { $R = 255; }
+ if ( $G < 0 ) { $G = 0; } if ( $G > 255 ) { $G = 255; }
+ if ( $B < 0 ) { $B = 0; } if ( $B > 255 ) { $B = 255; }
+
+ if ( !$this->Antialias )
+ {
+ if ( $this->Shadow && $this->ShadowX != 0 && $this->ShadowY != 0 )
+ {
+ $ShadowColor = $this->allocateColor($this->Picture,$this->ShadowR,$this->ShadowG,$this->ShadowB,$this->Shadowa);
+ imagesetpixel($this->Picture,$X+$this->ShadowX,$Y+$this->ShadowY,$ShadowColor);
+ }
+
+ $PlotColor = $this->allocateColor($this->Picture,$R,$G,$B,$Alpha);
+ imagesetpixel($this->Picture,$X,$Y,$PlotColor);
+
+ return(0);
+ }
+
+ $Plot = "";
+ $Xi = floor($X);
+ $Yi = floor($Y);
+
+ if ( $Xi == $X && $Yi == $Y)
+ {
+ if ( $Alpha == 100 )
+ $this->drawAlphaPixel($X,$Y,100,$R,$G,$B);
+ else
+ $this->drawAlphaPixel($X,$Y,$Alpha,$R,$G,$B);
+ }
+ else
+ {
+ $Alpha1 = (((1 - ($X - floor($X))) * (1 - ($Y - floor($Y))) * 100) / 100) * $Alpha;
+ if ( $Alpha1 > $this->AntialiasQuality ) { $this->drawAlphaPixel($Xi,$Yi,$Alpha1,$R,$G,$B); }
+
+ $Alpha2 = ((($X - floor($X)) * (1 - ($Y - floor($Y))) * 100) / 100) * $Alpha;
+ if ( $Alpha2 > $this->AntialiasQuality ) { $this->drawAlphaPixel($Xi+1,$Yi,$Alpha2,$R,$G,$B); }
+
+ $Alpha3 = (((1 - ($X - floor($X))) * ($Y - floor($Y)) * 100) / 100) * $Alpha;
+ if ( $Alpha3 > $this->AntialiasQuality ) { $this->drawAlphaPixel($Xi,$Yi+1,$Alpha3,$R,$G,$B); }
+
+ $Alpha4 = ((($X - floor($X)) * ($Y - floor($Y)) * 100) / 100) * $Alpha;
+ if ( $Alpha4 > $this->AntialiasQuality ) { $this->drawAlphaPixel($Xi+1,$Yi+1,$Alpha4,$R,$G,$B); }
+ }
+ }
+
+ /* Draw a semi-transparent pixel */
+ function drawAlphaPixel($X,$Y,$Alpha,$R,$G,$B)
+ {
+ if ( isset($this->Mask[$X])) { if ( isset($this->Mask[$X][$Y]) ) { return(0); } }
+
+ if ( $X < 0 || $Y < 0 || $X >= $this->XSize || $Y >= $this->YSize )
+ return(-1);
+
+ if ( $R < 0 ) { $R = 0; } if ( $R > 255 ) { $R = 255; }
+ if ( $G < 0 ) { $G = 0; } if ( $G > 255 ) { $G = 255; }
+ if ( $B < 0 ) { $B = 0; } if ( $B > 255 ) { $B = 255; }
+
+ if ( $this->Shadow && $this->ShadowX != 0 && $this->ShadowY != 0 )
+ {
+ $AlphaFactor = floor(($Alpha / 100) * $this->Shadowa);
+ $ShadowColor = $this->allocateColor($this->Picture,$this->ShadowR,$this->ShadowG,$this->ShadowB,$AlphaFactor);
+ imagesetpixel($this->Picture,$X+$this->ShadowX,$Y+$this->ShadowY,$ShadowColor);
+ }
+
+ $C_Aliased = $this->allocateColor($this->Picture,$R,$G,$B,$Alpha);
+ imagesetpixel($this->Picture,$X,$Y,$C_Aliased);
+ }
+
+ /* Convert apha to base 10 */
+ function convertAlpha($AlphaValue)
+ { return((127/100)*(100-$AlphaValue)); }
+
+ /* Allocate a color with transparency */
+ function allocateColor($Picture,$R,$G,$B,$Alpha=100)
+ {
+ if ( $R < 0 ) { $R = 0; } if ( $R > 255 ) { $R = 255; }
+ if ( $G < 0 ) { $G = 0; } if ( $G > 255 ) { $G = 255; }
+ if ( $B < 0 ) { $B = 0; } if ( $B > 255 ) { $B = 255; }
+ if ( $Alpha < 0 ) { $Alpha = 0; }
+ if ( $Alpha > 100) { $Alpha = 100; }
+
+ $Alpha = $this->convertAlpha($Alpha);
+ return(imagecolorallocatealpha($Picture,$R,$G,$B,$Alpha));
+ }
+
+ /* Load a PNG file and draw it over the chart */
+ function drawFromPNG($X,$Y,$FileName)
+ { $this->drawFromPicture(1,$FileName,$X,$Y); }
+
+ /* Load a GIF file and draw it over the chart */
+ function drawFromGIF($X,$Y,$FileName)
+ { $this->drawFromPicture(2,$FileName,$X,$Y); }
+
+ /* Load a JPEG file and draw it over the chart */
+ function drawFromJPG($X,$Y,$FileName)
+ { $this->drawFromPicture(3,$FileName,$X,$Y); }
+
+ function getPicInfo($FileName)
+ {
+ $Infos = getimagesize($FileName);
+ $Width = $Infos[0];
+ $Height = $Infos[1];
+ $Type = $Infos["mime"];
+
+ if ( $Type == "image/png") { $Type = 1; }
+ if ( $Type == "image/gif") { $Type = 2; }
+ if ( $Type == "image/jpeg ") { $Type = 3; }
+
+ return(array($Width,$Height,$Type));
+ }
+
+ /* Generic loader function for external pictures */
+ function drawFromPicture($PicType,$FileName,$X,$Y)
+ {
+ if ( file_exists($FileName))
+ {
+ list($Width,$Height) = $this->getPicInfo($FileName);
+
+ if ( $PicType == 1 )
+ { $Raster = imagecreatefrompng($FileName); }
+ elseif ( $PicType == 2 )
+ { $Raster = imagecreatefromgif($FileName); }
+ elseif ( $PicType == 3 )
+ { $Raster = imagecreatefromjpeg($FileName); }
+ else
+ { return(0); }
+
+
+ $RestoreShadow = $this->Shadow;
+ if ( $this->Shadow && $this->ShadowX != 0 && $this->ShadowY != 0 )
+ {
+ $this->Shadow = FALSE;
+ if ( $PicType == 3 )
+ $this->drawFilledRectangle($X+$this->ShadowX,$Y+$this->ShadowY,$X+$Width+$this->ShadowX,$Y+$Height+$this->ShadowY,array("R"=>$this->ShadowR,"G"=>$this->ShadowG,"B"=>$this->ShadowB,"Alpha"=>$this->Shadowa));
+ else
+ {
+ $TranparentID = imagecolortransparent($Raster);
+ for ($Xc=0;$Xc<=$Width-1;$Xc++)
+ {
+ for ($Yc=0;$Yc<=$Height-1;$Yc++)
+ {
+ $RGBa = imagecolorat($Raster,$Xc,$Yc);
+ $Values = imagecolorsforindex($Raster,$RGBa);
+ if ( $Values["alpha"] < 120 )
+ {
+ $AlphaFactor = floor(($this->Shadowa / 100) * ((100 / 127) * (127-$Values["alpha"])));
+ $this->drawAlphaPixel($X+$Xc+$this->ShadowX,$Y+$Yc+$this->ShadowY,$AlphaFactor,$this->ShadowR,$this->ShadowG,$this->ShadowB);
+ }
+ }
+ }
+ }
+ }
+ $this->Shadow = $RestoreShadow;
+
+ imagecopy($this->Picture,$Raster,$X,$Y,0,0,$Width,$Height);
+ imagedestroy($Raster);
+ }
+ }
+
+ /* Draw an arrow */
+ function drawArrow($X1,$Y1,$X2,$Y2,$Format="")
+ {
+ $FillR = isset($Format["FillR"]) ? $Format["FillR"] : 0;
+ $FillG = isset($Format["FillG"]) ? $Format["FillG"] : 0;
+ $FillB = isset($Format["FillB"]) ? $Format["FillB"] : 0;
+ $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : $FillR;
+ $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : $FillG;
+ $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : $FillB;
+ $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
+ $Size = isset($Format["Size"]) ? $Format["Size"] : 10;
+ $Ratio = isset($Format["Ratio"]) ? $Format["Ratio"] : .5;
+ $TwoHeads = isset($Format["TwoHeads"]) ? $Format["TwoHeads"] : FALSE;
+ $Ticks = isset($Format["Ticks"]) ? $Format["Ticks"] : FALSE;
+
+ /* Calculate the line angle */
+ $Angle = $this->getAngle($X1,$Y1,$X2,$Y2);
+
+ /* Override Shadow support, this will be managed internally */
+ $RestoreShadow = $this->Shadow;
+ if ( $this->Shadow && $this->ShadowX != 0 && $this->ShadowY != 0 )
+ {
+ $this->Shadow = FALSE;
+ $this->drawArrow($X1+$this->ShadowX,$Y1+$this->ShadowY,$X2+$this->ShadowX,$Y2+$this->ShadowY,array("FillR"=>$this->ShadowR,"FillG"=>$this->ShadowG,"FillB"=>$this->ShadowB,"Alpha"=>$this->Shadowa,"Size"=>$Size,"Ratio"=>$Ratio,"TwoHeads"=>$TwoHeads,"Ticks"=>$Ticks));
+ }
+
+ /* Draw the 1st Head */
+ $TailX = cos(($Angle-180)*PI/180)*$Size+$X2;
+ $TailY = sin(($Angle-180)*PI/180)*$Size+$Y2;
+
+ $Points = "";
+ $Points[] = $X2; $Points[] = $Y2;
+ $Points[] = cos(($Angle-90)*PI/180)*$Size*$Ratio+$TailX; $Points[] = sin(($Angle-90)*PI/180)*$Size*$Ratio+$TailY;
+ $Points[] = cos(($Angle-270)*PI/180)*$Size*$Ratio+$TailX; $Points[] = sin(($Angle-270)*PI/180)*$Size*$Ratio+$TailY;
+ $Points[] = $X2; $Points[] = $Y2;
+
+ /* Visual correction */
+ if ($Angle == 180 || $Angle == 360 ) { $Points[4] = $Points[2]; }
+ if ($Angle == 90 || $Angle == 270 ) { $Points[5] = $Points[3]; }
+
+ $ArrowColor = $this->allocateColor($this->Picture,$FillR,$FillG,$FillB,$Alpha);
+ ImageFilledPolygon($this->Picture,$Points,4,$ArrowColor);
+
+ $this->drawLine($Points[0],$Points[1],$Points[2],$Points[3],array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha));
+ $this->drawLine($Points[2],$Points[3],$Points[4],$Points[5],array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha));
+ $this->drawLine($Points[0],$Points[1],$Points[4],$Points[5],array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha));
+
+ /* Draw the second head */
+ if ( $TwoHeads )
+ {
+ $Angle = $this->getAngle($X2,$Y2,$X1,$Y1);
+
+ $TailX2 = cos(($Angle-180)*PI/180)*$Size+$X1;
+ $TailY2 = sin(($Angle-180)*PI/180)*$Size+$Y1;
+
+ $Points = "";
+ $Points[] = $X1; $Points[] = $Y1;
+ $Points[] = cos(($Angle-90)*PI/180)*$Size*$Ratio+$TailX2; $Points[] = sin(($Angle-90)*PI/180)*$Size*$Ratio+$TailY2;
+ $Points[] = cos(($Angle-270)*PI/180)*$Size*$Ratio+$TailX2; $Points[] = sin(($Angle-270)*PI/180)*$Size*$Ratio+$TailY2;
+ $Points[] = $X1; $Points[] = $Y1;
+
+ /* Visual correction */
+ if ($Angle == 180 || $Angle == 360 ) { $Points[4] = $Points[2]; }
+ if ($Angle == 90 || $Angle == 270 ) { $Points[5] = $Points[3]; }
+
+ $ArrowColor = $this->allocateColor($this->Picture,$FillR,$FillG,$FillB,$Alpha);
+ ImageFilledPolygon($this->Picture,$Points,4,$ArrowColor);
+
+ $this->drawLine($Points[0],$Points[1],$Points[2],$Points[3],array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha));
+ $this->drawLine($Points[2],$Points[3],$Points[4],$Points[5],array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha));
+ $this->drawLine($Points[0],$Points[1],$Points[4],$Points[5],array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha));
+
+ $this->drawLine($TailX,$TailY,$TailX2,$TailY2,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
+ }
+ else
+ $this->drawLine($X1,$Y1,$TailX,$TailY,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
+
+ /* Re-enable shadows */
+ $this->Shadow = $RestoreShadow;
+ }
+
+ /* Draw a label with associated arrow */
+ function drawArrowLabel($X1,$Y1,$Text,$Format="")
+ {
+ $FillR = isset($Format["FillR"]) ? $Format["FillR"] : 0;
+ $FillG = isset($Format["FillG"]) ? $Format["FillG"] : 0;
+ $FillB = isset($Format["FillB"]) ? $Format["FillB"] : 0;
+ $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : $FillR;
+ $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : $FillG;
+ $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : $FillB;
+ $FontName = isset($Format["FontName"]) ? $Format["FontName"] : $this->FontName;
+ $FontSize = isset($Format["FontSize"]) ? $Format["FontSize"] : $this->FontSize;
+ $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
+ $Length = isset($Format["Length"]) ? $Format["Length"] : 50;
+ $Angle = isset($Format["Angle"]) ? $Format["Angle"] : 315;
+ $Size = isset($Format["Size"]) ? $Format["Size"] : 10;
+ $Position = isset($Format["Position"]) ? $Format["Position"] : POSITION_TOP;
+ $RoundPos = isset($Format["RoundPos"]) ? $Format["RoundPos"] : FALSE;
+ $Ticks = isset($Format["Ticks"]) ? $Format["Ticks"] : NULL;
+
+ $Angle = $Angle % 360;
+
+ $X2 = sin(($Angle+180)*PI/180)*$Length+$X1;
+ $Y2 = cos(($Angle+180)*PI/180)*$Length+$Y1;
+
+ if ( $RoundPos && $Angle > 0 && $Angle < 180 ) { $Y2 = ceil($Y2); }
+ if ( $RoundPos && $Angle > 180 ) { $Y2 = floor($Y2); }
+
+ $this->drawArrow($X2,$Y2,$X1,$Y1,$Format);
+
+ $Size = imagettfbbox($FontSize,0,$FontName,$Text);
+ $TxtWidth = max(abs($Size[2]-$Size[0]),abs($Size[0]-$Size[6]));
+ $TxtHeight = max(abs($Size[1]-$Size[7]),abs($Size[3]-$Size[1]));
+
+ if ( $Angle > 0 && $Angle < 180 )
+ {
+ $this->drawLine($X2,$Y2,$X2-$TxtWidth,$Y2,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
+ if ( $Position == POSITION_TOP )
+ $this->drawText($X2,$Y2-2,$Text,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha,"Align"=>TEXT_ALIGN_BOTTOMRIGHT));
+ else
+ $this->drawText($X2,$Y2+4,$Text,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha,"Align"=>TEXT_ALIGN_TOPRIGHT));
+ }
+ else
+ {
+ $this->drawLine($X2,$Y2,$X2+$TxtWidth,$Y2,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
+ if ( $Position == POSITION_TOP )
+ $this->drawText($X2,$Y2-2,$Text,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha));
+ else
+ $this->drawText($X2,$Y2+4,$Text,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha,"Align"=>TEXT_ALIGN_TOPLEFT));
+ }
+ }
+
+ /* Draw a progress bar filled with specified % */
+ function drawProgress($X,$Y,$Percent,$Format="")
+ {
+ if ( $Percent > 100 ) { $Percent = 100; }
+ if ( $Percent < 0 ) { $Percent = 0; }
+
+ $Width = isset($Format["Width"]) ? $Format["Width"] : 200;
+ $Height = isset($Format["Height"]) ? $Format["Height"] : 20;
+ $Orientation = isset($Format["Orientation"]) ? $Format["Orientation"] : ORIENTATION_HORIZONTAL;
+ $ShowLabel = isset($Format["ShowLabel"]) ? $Format["ShowLabel"] : FALSE;
+ $LabelPos = isset($Format["LabelPos"]) ? $Format["LabelPos"] : LABEL_POS_INSIDE;
+ $Margin = isset($Format["Margin"]) ? $Format["Margin"] : 10;
+ $R = isset($Format["R"]) ? $Format["R"] : 130;
+ $G = isset($Format["G"]) ? $Format["G"] : 130;
+ $B = isset($Format["B"]) ? $Format["B"] : 130;
+ $RFade = isset($Format["RFade"]) ? $Format["RFade"] : -1;
+ $GFade = isset($Format["GFade"]) ? $Format["GFade"] : -1;
+ $BFade = isset($Format["BFade"]) ? $Format["BFade"] : -1;
+ $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : $R;
+ $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : $G;
+ $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : $B;
+ $BoxBorderR = isset($Format["BoxBorderR"]) ? $Format["BoxBorderR"] : 0;
+ $BoxBorderG = isset($Format["BoxBorderG"]) ? $Format["BoxBorderG"] : 0;
+ $BoxBorderB = isset($Format["BoxBorderB"]) ? $Format["BoxBorderB"] : 0;
+ $BoxBackR = isset($Format["BoxBackR"]) ? $Format["BoxBackR"] : 255;
+ $BoxBackG = isset($Format["BoxBackG"]) ? $Format["BoxBackG"] : 255;
+ $BoxBackB = isset($Format["BoxBackB"]) ? $Format["BoxBackB"] : 255;
+ $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
+ $Surrounding = isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL;
+ $BoxSurrounding = isset($Format["BoxSurrounding"]) ? $Format["BoxSurrounding"] : NULL;
+ $NoAngle = isset($Format["NoAngle"]) ? $Format["NoAngle"] : FALSE;
+
+ if ( $RFade != -1 && $GFade != -1 && $BFade != -1 )
+ {
+ $RFade = (($RFade-$R)/100)*$Percent+$R;
+ $GFade = (($GFade-$G)/100)*$Percent+$G;
+ $BFade = (($BFade-$B)/100)*$Percent+$B;
+ }
+
+ if ( $Surrounding != NULL ) { $BorderR = $R + $Surrounding; $BorderG = $G + $Surrounding; $BorderB = $B + $Surrounding; }
+ if ( $BoxSurrounding != NULL ) { $BoxBorderR = $BoxBackR + $Surrounding; $BoxBorderG = $BoxBackG + $Surrounding; $BoxBorderB = $BoxBackB + $Surrounding; }
+
+ if ( $Orientation == ORIENTATION_VERTICAL )
+ {
+ $InnerHeight = (($Height-2)/100)*$Percent;
+ $this->drawFilledRectangle($X,$Y,$X+$Width,$Y-$Height,array("R"=>$BoxBackR,"G"=>$BoxBackG,"B"=>$BoxBackB,"BorderR"=>$BoxBorderR,"BorderG"=>$BoxBorderG,"BorderB"=>$BoxBorderB,"NoAngle"=>$NoAngle));
+
+ $RestoreShadow = $this->Shadow; $this->Shadow = FALSE;
+ if ( $RFade != -1 && $GFade != -1 && $BFade != -1 )
+ {
+ $GradientOptions = array("StartR"=>$RFade,"StartG"=>$GFade,"StartB"=>$BFade,"EndR"=>$R,"EndG"=>$G,"EndB"=>$B);
+ $this->drawGradientArea($X+1,$Y-1,$X+$Width-1,$Y-$InnerHeight,DIRECTION_VERTICAL,$GradientOptions);
+
+ if ( $Surrounding )
+ $this->drawRectangle($X+1,$Y-1,$X+$Width-1,$Y-$InnerHeight,array("R"=>255,"G"=>255,"B"=>255,"Alpha"=>$Surrounding));
+ }
+ else
+ $this->drawFilledRectangle($X+1,$Y-1,$X+$Width-1,$Y-$InnerHeight,array("R"=>$R,"G"=>$G,"B"=>$B,"BorderR"=>$BorderR,"BorderG"=>$BorderG,"BorderB"=>$BorderB));
+
+ $this->Shadow = $RestoreShadow;
+
+ if ( $ShowLabel && $LabelPos == LABEL_POS_BOTTOM ) { $this->drawText($X+($Width/2),$Y+$Margin,$Percent."%",array("Align"=>TEXT_ALIGN_TOPMIDDLE)); }
+ if ( $ShowLabel && $LabelPos == LABEL_POS_TOP ) { $this->drawText($X+($Width/2),$Y-$Height-$Margin,$Percent."%",array("Align"=>TEXT_ALIGN_BOTTOMMIDDLE)); }
+ if ( $ShowLabel && $LabelPos == LABEL_POS_INSIDE ) { $this->drawText($X+($Width/2),$Y-$InnerHeight-$Margin,$Percent."%",array("Align"=>TEXT_ALIGN_MIDDLELEFT,"Angle"=>90)); }
+ if ( $ShowLabel && $LabelPos == LABEL_POS_CENTER ) { $this->drawText($X+($Width/2),$Y-($Height/2),$Percent."%",array("Align"=>TEXT_ALIGN_MIDDLEMIDDLE,"Angle"=>90)); }
+ }
+ else
+ {
+ if ( $Percent == 100 )
+ $InnerWidth = $Width-1;
+ else
+ $InnerWidth = (($Width-2)/100)*$Percent;
+
+ $this->drawFilledRectangle($X,$Y,$X+$Width,$Y+$Height,array("R"=>$BoxBackR,"G"=>$BoxBackG,"B"=>$BoxBackB,"BorderR"=>$BoxBorderR,"BorderG"=>$BoxBorderG,"BorderB"=>$BoxBorderB,"NoAngle"=>$NoAngle));
+
+ $RestoreShadow = $this->Shadow; $this->Shadow = FALSE;
+ if ( $RFade != -1 && $GFade != -1 && $BFade != -1 )
+ {
+ $GradientOptions = array("StartR"=>$R,"StartG"=>$G,"StartB"=>$B,"EndR"=>$RFade,"EndG"=>$GFade,"EndB"=>$BFade);
+ $this->drawGradientArea($X+1,$Y+1,$X+$InnerWidth,$Y+$Height-1,DIRECTION_HORIZONTAL,$GradientOptions);
+
+ if ( $Surrounding )
+ $this->drawRectangle($X+1,$Y+1,$X+$InnerWidth,$Y+$Height-1,array("R"=>255,"G"=>255,"B"=>255,"Alpha"=>$Surrounding));
+ }
+ else
+ $this->drawFilledRectangle($X+1,$Y+1,$X+$InnerWidth,$Y+$Height-1,array("R"=>$R,"G"=>$G,"B"=>$B,"BorderR"=>$BorderR,"BorderG"=>$BorderG,"BorderB"=>$BorderB));
+
+ $this->Shadow = $RestoreShadow;
+
+ if ( $ShowLabel && $LabelPos == LABEL_POS_LEFT ) { $this->drawText($X-$Margin,$Y+($Height/2),$Percent."%",array("Align"=>TEXT_ALIGN_MIDDLERIGHT)); }
+ if ( $ShowLabel && $LabelPos == LABEL_POS_RIGHT ) { $this->drawText($X+$Width+$Margin,$Y+($Height/2),$Percent."%",array("Align"=>TEXT_ALIGN_MIDDLELEFT)); }
+ if ( $ShowLabel && $LabelPos == LABEL_POS_CENTER ) { $this->drawText($X+($Width/2),$Y+($Height/2),$Percent."%",array("Align"=>TEXT_ALIGN_MIDDLEMIDDLE)); }
+ if ( $ShowLabel && $LabelPos == LABEL_POS_INSIDE ) { $this->drawText($X+$InnerWidth+$Margin,$Y+($Height/2),$Percent."%",array("Align"=>TEXT_ALIGN_MIDDLELEFT)); }
+ }
+ }
+
+ /* Get the legend box size */
+ function getLegendSize($Format="")
+ {
+ $FontName = isset($Format["FontName"]) ? $Format["FontName"] : $this->FontName;
+ $FontSize = isset($Format["FontSize"]) ? $Format["FontSize"] : $this->FontSize;
+ $BoxSize = isset($Format["BoxSize"]) ? $Format["BoxSize"] : 5;
+ $Margin = isset($Format["Margin"]) ? $Format["Margin"] : 5;
+ $Style = isset($Format["Style"]) ? $Format["Style"] : LEGEND_ROUND;
+ $Mode = isset($Format["Mode"]) ? $Format["Mode"] : LEGEND_VERTICAL;
+ $BoxWidth = isset($Format["BoxWidth"]) ? $Format["BoxWidth"] : 5;
+ $BoxHeight = isset($Format["BoxHeight"]) ? $Format["BoxHeight"] : 5;
+ $IconAreaWidth = isset($Format["IconAreaWidth"]) ? $Format["IconAreaWidth"] : $BoxWidth;
+ $IconAreaHeight = isset($Format["IconAreaHeight"]) ? $Format["IconAreaHeight"] : $BoxHeight;
+ $XSpacing = isset($Format["XSpacing"]) ? $Format["XSpacing"] : 5;
+
+ $Data = $this->DataSet->getData();
+
+ foreach($Data["Series"] as $SerieName => $Serie)
+ {
+ if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] && isset($Serie["Picture"]))
+ {
+ list($PicWidth,$PicHeight) = $this->getPicInfo($Serie["Picture"]);
+ if ( $IconAreaWidth < $PicWidth ) { $IconAreaWidth = $PicWidth; }
+ if ( $IconAreaHeight < $PicHeight ) { $IconAreaHeight = $PicHeight; }
+ }
+ }
+
+ $YStep = max($this->FontSize,$IconAreaHeight) + 5;
+ $XStep = $IconAreaWidth + 5;
+ $XStep = $XSpacing;
+
+ $X=100; $Y=100;
+
+ $Boundaries = ""; $Boundaries["L"] = $X; $Boundaries["T"] = $Y; $Boundaries["R"] = 0; $Boundaries["B"] = 0; $vY = $Y; $vX = $X;
+ foreach($Data["Series"] as $SerieName => $Serie)
+ {
+ if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
+ {
+ if ( $Mode == LEGEND_VERTICAL )
+ {
+ $BoxArray = $this->getTextBox($vX+$IconAreaWidth+4,$vY+$IconAreaHeight/2,$FontName,$FontSize,0,$Serie["Description"]);
+
+ if ( $Boundaries["T"] > $BoxArray[2]["Y"]+$IconAreaHeight/2 ) { $Boundaries["T"] = $BoxArray[2]["Y"]+$IconAreaHeight/2; }
+ if ( $Boundaries["R"] < $BoxArray[1]["X"]+2 ) { $Boundaries["R"] = $BoxArray[1]["X"]+2; }
+ if ( $Boundaries["B"] < $BoxArray[1]["Y"]+2+$IconAreaHeight/2 ) { $Boundaries["B"] = $BoxArray[1]["Y"]+2+$IconAreaHeight/2; }
+
+ $Lines = preg_split("/\n/",$Serie["Description"]);
+ $vY = $vY + max($this->FontSize*count($Lines),$IconAreaHeight) + 5;
+ }
+ elseif ( $Mode == LEGEND_HORIZONTAL )
+ {
+ $Lines = preg_split("/\n/",$Serie["Description"]);
+ $Width = "";
+ foreach($Lines as $Key => $Value)
+ {
+ $BoxArray = $this->getTextBox($vX+$IconAreaWidth+6,$Y+$IconAreaHeight/2+(($this->FontSize+3)*$Key),$FontName,$FontSize,0,$Value);
+
+ if ( $Boundaries["T"] > $BoxArray[2]["Y"]+$IconAreaHeight/2 ) { $Boundaries["T"] = $BoxArray[2]["Y"]+$IconAreaHeight/2; }
+ if ( $Boundaries["R"] < $BoxArray[1]["X"]+2 ) { $Boundaries["R"] = $BoxArray[1]["X"]+2; }
+ if ( $Boundaries["B"] < $BoxArray[1]["Y"]+2+$IconAreaHeight/2 ) { $Boundaries["B"] = $BoxArray[1]["Y"]+2+$IconAreaHeight/2; }
+
+ $Width[] = $BoxArray[1]["X"];
+ }
+
+ $vX=max($Width)+$XStep;
+ }
+ }
+ }
+ $vY=$vY-$YStep; $vX=$vX-$XStep;
+
+ $TopOffset = $Y - $Boundaries["T"];
+ if ( $Boundaries["B"]-($vY+$IconAreaHeight) < $TopOffset ) { $Boundaries["B"] = $vY+$IconAreaHeight+$TopOffset; }
+
+ $Width = ($Boundaries["R"]+$Margin) - ($Boundaries["L"]-$Margin);
+ $Height = ($Boundaries["B"]+$Margin) - ($Boundaries["T"]-$Margin);
+
+ return(array("Width"=>$Width,"Height"=>$Height));
+ }
+
+ /* Draw the legend of the active series */
+ function drawLegend($X,$Y,$Format="")
+ {
+ $Family = isset($Format["Family"]) ? $Format["Family"] : LEGEND_FAMILY_BOX;
+ $FontName = isset($Format["FontName"]) ? $Format["FontName"] : $this->FontName;
+ $FontSize = isset($Format["FontSize"]) ? $Format["FontSize"] : $this->FontSize;
+ $FontR = isset($Format["FontR"]) ? $Format["FontR"] : $this->FontColorR;
+ $FontG = isset($Format["FontG"]) ? $Format["FontG"] : $this->FontColorG;
+ $FontB = isset($Format["FontB"]) ? $Format["FontB"] : $this->FontColorB;
+ $BoxWidth = isset($Format["BoxWidth"]) ? $Format["BoxWidth"] : 5;
+ $BoxHeight = isset($Format["BoxHeight"]) ? $Format["BoxHeight"] : 5;
+ $IconAreaWidth = isset($Format["IconAreaWidth"]) ? $Format["IconAreaWidth"] : $BoxWidth;
+ $IconAreaHeight = isset($Format["IconAreaHeight"]) ? $Format["IconAreaHeight"] : $BoxHeight;
+ $XSpacing = isset($Format["XSpacing"]) ? $Format["XSpacing"] : 5;
+ $Margin = isset($Format["Margin"]) ? $Format["Margin"] : 5;
+ $R = isset($Format["R"]) ? $Format["R"] : 200;
+ $G = isset($Format["G"]) ? $Format["G"] : 200;
+ $B = isset($Format["B"]) ? $Format["B"] : 200;
+ $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
+ $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : 255;
+ $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : 255;
+ $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : 255;
+ $Surrounding = isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL;
+ $Style = isset($Format["Style"]) ? $Format["Style"] : LEGEND_ROUND;
+ $Mode = isset($Format["Mode"]) ? $Format["Mode"] : LEGEND_VERTICAL;
+
+ if ( $Surrounding != NULL ) { $BorderR = $R + $Surrounding; $BorderG = $G + $Surrounding; $BorderB = $B + $Surrounding; }
+
+ $Data = $this->DataSet->getData();
+
+ foreach($Data["Series"] as $SerieName => $Serie)
+ {
+ if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] && isset($Serie["Picture"]))
+ {
+ list($PicWidth,$PicHeight) = $this->getPicInfo($Serie["Picture"]);
+ if ( $IconAreaWidth < $PicWidth ) { $IconAreaWidth = $PicWidth; }
+ if ( $IconAreaHeight < $PicHeight ) { $IconAreaHeight = $PicHeight; }
+ }
+ }
+
+
+ $YStep = max($this->FontSize,$IconAreaHeight) + 5;
+ $XStep = $IconAreaWidth + 5;
+ $XStep = $XSpacing;
+
+ $Boundaries = ""; $Boundaries["L"] = $X; $Boundaries["T"] = $Y; $Boundaries["R"] = 0; $Boundaries["B"] = 0; $vY = $Y; $vX = $X;
+ foreach($Data["Series"] as $SerieName => $Serie)
+ {
+ if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
+ {
+ if ( $Mode == LEGEND_VERTICAL )
+ {
+ $BoxArray = $this->getTextBox($vX+$IconAreaWidth+4,$vY+$IconAreaHeight/2,$FontName,$FontSize,0,$Serie["Description"]);
+
+ if ( $Boundaries["T"] > $BoxArray[2]["Y"]+$IconAreaHeight/2 ) { $Boundaries["T"] = $BoxArray[2]["Y"]+$IconAreaHeight/2; }
+ if ( $Boundaries["R"] < $BoxArray[1]["X"]+2 ) { $Boundaries["R"] = $BoxArray[1]["X"]+2; }
+ if ( $Boundaries["B"] < $BoxArray[1]["Y"]+2+$IconAreaHeight/2 ) { $Boundaries["B"] = $BoxArray[1]["Y"]+2+$IconAreaHeight/2; }
+
+ $Lines = preg_split("/\n/",$Serie["Description"]);
+ $vY = $vY + max($this->FontSize*count($Lines),$IconAreaHeight) + 5;
+ }
+ elseif ( $Mode == LEGEND_HORIZONTAL )
+ {
+ $Lines = preg_split("/\n/",$Serie["Description"]);
+ $Width = "";
+ foreach($Lines as $Key => $Value)
+ {
+ $BoxArray = $this->getTextBox($vX+$IconAreaWidth+6,$Y+$IconAreaHeight/2+(($this->FontSize+3)*$Key),$FontName,$FontSize,0,$Value);
+
+ if ( $Boundaries["T"] > $BoxArray[2]["Y"]+$IconAreaHeight/2 ) { $Boundaries["T"] = $BoxArray[2]["Y"]+$IconAreaHeight/2; }
+ if ( $Boundaries["R"] < $BoxArray[1]["X"]+2 ) { $Boundaries["R"] = $BoxArray[1]["X"]+2; }
+ if ( $Boundaries["B"] < $BoxArray[1]["Y"]+2+$IconAreaHeight/2 ) { $Boundaries["B"] = $BoxArray[1]["Y"]+2+$IconAreaHeight/2; }
+
+ $Width[] = $BoxArray[1]["X"];
+ }
+
+ $vX=max($Width)+$XStep;
+ }
+ }
+ }
+ $vY=$vY-$YStep; $vX=$vX-$XStep;
+
+ $TopOffset = $Y - $Boundaries["T"];
+ if ( $Boundaries["B"]-($vY+$IconAreaHeight) < $TopOffset ) { $Boundaries["B"] = $vY+$IconAreaHeight+$TopOffset; }
+
+ if ( $Style == LEGEND_ROUND )
+ $this->drawRoundedFilledRectangle($Boundaries["L"]-$Margin,$Boundaries["T"]-$Margin,$Boundaries["R"]+$Margin,$Boundaries["B"]+$Margin,$Margin,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"BorderR"=>$BorderR,"BorderG"=>$BorderG,"BorderB"=>$BorderB));
+ elseif ( $Style == LEGEND_BOX )
+ $this->drawFilledRectangle($Boundaries["L"]-$Margin,$Boundaries["T"]-$Margin,$Boundaries["R"]+$Margin,$Boundaries["B"]+$Margin,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"BorderR"=>$BorderR,"BorderG"=>$BorderG,"BorderB"=>$BorderB));
+
+ $RestoreShadow = $this->Shadow; $this->Shadow = FALSE;
+ foreach($Data["Series"] as $SerieName => $Serie)
+ {
+ if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
+ {
+ $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"];
+ $Ticks = $Serie["Ticks"]; $Weight = $Serie["Weight"];
+
+ if ( isset($Serie["Picture"]) )
+ {
+ $Picture = $Serie["Picture"];
+ list($PicWidth,$PicHeight) = $this->getPicInfo($Picture);
+ $PicX = $X+$IconAreaWidth/2; $PicY = $Y+$IconAreaHeight/2;
+
+ $this->drawFromPNG($PicX-$PicWidth/2,$PicY-$PicHeight/2,$Picture);
+ }
+ else
+ {
+ if ( $Family == LEGEND_FAMILY_BOX )
+ {
+ if ( $BoxWidth != $IconAreaWidth ) { $XOffset = floor(($IconAreaWidth-$BoxWidth)/2); } else { $XOffset = 0; }
+ if ( $BoxHeight != $IconAreaHeight ) { $YOffset = floor(($IconAreaHeight-$BoxHeight)/2); } else { $YOffset = 0; }
+
+ $this->drawFilledRectangle($X+1+$XOffset,$Y+1+$YOffset,$X+$BoxWidth+$XOffset+1,$Y+$BoxHeight+1+$YOffset,array("R"=>0,"G"=>0,"B"=>0,"Alpha"=>20));
+ $this->drawFilledRectangle($X+$XOffset,$Y+$YOffset,$X+$BoxWidth+$XOffset,$Y+$BoxHeight+$YOffset,array("R"=>$R,"G"=>$G,"B"=>$B,"Surrounding"=>20));
+ }
+ elseif ( $Family == LEGEND_FAMILY_CIRCLE )
+ {
+ $this->drawFilledCircle($X+1+$IconAreaWidth/2,$Y+1+$IconAreaHeight/2,min($IconAreaHeight/2,$IconAreaWidth/2),array("R"=>0,"G"=>0,"B"=>0,"Alpha"=>20));
+ $this->drawFilledCircle($X+$IconAreaWidth/2,$Y+$IconAreaHeight/2,min($IconAreaHeight/2,$IconAreaWidth/2),array("R"=>$R,"G"=>$G,"B"=>$B,"Surrounding"=>20));
+ }
+ elseif ( $Family == LEGEND_FAMILY_LINE )
+ {
+ $this->drawLine($X+1,$Y+1+$IconAreaHeight/2,$X+1+$IconAreaWidth,$Y+1+$IconAreaHeight/2,array("R"=>0,"G"=>0,"B"=>0,"Alpha"=>20,"Ticks"=>$Ticks,"Weight"=>$Weight));
+ $this->drawLine($X,$Y+$IconAreaHeight/2,$X+$IconAreaWidth,$Y+$IconAreaHeight/2,array("R"=>$R,"G"=>$G,"B"=>$B,"Ticks"=>$Ticks,"Weight"=>$Weight));
+ }
+ }
+
+ if ( $Mode == LEGEND_VERTICAL )
+ {
+ $Lines = preg_split("/\n/",$Serie["Description"]);
+ foreach($Lines as $Key => $Value)
+ $this->drawText($X+$IconAreaWidth+4,$Y+$IconAreaHeight/2+(($this->FontSize+3)*$Key),$Value,array("R"=>$FontR,"G"=>$FontG,"B"=>$FontB,"Align"=>TEXT_ALIGN_MIDDLELEFT));
+
+ $Y=$Y+max($this->FontSize*count($Lines),$IconAreaHeight) + 5;
+ }
+ elseif ( $Mode == LEGEND_HORIZONTAL )
+ {
+ $Lines = preg_split("/\n/",$Serie["Description"]);
+ $Width = "";
+ foreach($Lines as $Key => $Value)
+ {
+ $BoxArray = $this->drawText($X+$IconAreaWidth+4,$Y+$IconAreaHeight/2+(($this->FontSize+3)*$Key),$Value,array("R"=>$FontR,"G"=>$FontG,"B"=>$FontB,"Align"=>TEXT_ALIGN_MIDDLELEFT));
+ $Width[] = $BoxArray[1]["X"];
+ }
+ $X=max($Width)+2+$XStep;
+ }
+ }
+ }
+
+
+ $this->Shadow = $RestoreShadow;
+ }
+
+ function drawScale($Format="")
+ {
+ $Pos = isset($Format["Pos"]) ? $Format["Pos"] : SCALE_POS_LEFTRIGHT;
+ $Floating = isset($Format["Floating"]) ? $Format["Floating"] : FALSE;
+ $Mode = isset($Format["Mode"]) ? $Format["Mode"] : SCALE_MODE_FLOATING;
+ $MinDivHeight = isset($Format["MinDivHeight"]) ? $Format["MinDivHeight"] : 20;
+ $Factors = isset($Format["Factors"]) ? $Format["Factors"] : array(1,2,5);
+ $ManualScale = isset($Format["ManualScale"]) ? $Format["ManualScale"] : array("0"=>array("Min"=>-100,"Max"=>100));
+ $XMargin = isset($Format["XMargin"]) ? $Format["XMargin"] : AUTO;
+ $YMargin = isset($Format["YMargin"]) ? $Format["YMargin"] : 0;
+ $ScaleSpacing = isset($Format["ScaleSpacing"]) ? $Format["ScaleSpacing"] : 15;
+ $InnerTickWidth = isset($Format["InnerTickWidth"]) ? $Format["InnerTickWidth"] : 2;
+ $OuterTickWidth = isset($Format["OuterTickWidth"]) ? $Format["OuterTickWidth"] : 2;
+ $DrawXLines = isset($Format["DrawXLines"]) ? $Format["DrawXLines"] : TRUE;
+ $DrawYLines = isset($Format["DrawYLines"]) ? $Format["DrawYLines"] : ALL;
+ $GridTicks = isset($Format["GridTicks"]) ? $Format["GridTicks"] : 4;
+ $GridR = isset($Format["GridR"]) ? $Format["GridR"] : 255;
+ $GridG = isset($Format["GridG"]) ? $Format["GridG"] : 255;
+ $GridB = isset($Format["GridB"]) ? $Format["GridB"] : 255;
+ $GridAlpha = isset($Format["GridAlpha"]) ? $Format["GridAlpha"] : 40;
+ $AxisRo = isset($Format["AxisR"]) ? $Format["AxisR"] : 0;
+ $AxisGo = isset($Format["AxisG"]) ? $Format["AxisG"] : 0;
+ $AxisBo = isset($Format["AxisB"]) ? $Format["AxisB"] : 0;
+ $AxisAlpha = isset($Format["AxisAlpha"]) ? $Format["AxisAlpha"] : 100;
+ $TickRo = isset($Format["TickR"]) ? $Format["TickR"] : 0;
+ $TickGo = isset($Format["TickG"]) ? $Format["TickG"] : 0;
+ $TickBo = isset($Format["TickB"]) ? $Format["TickB"] : 0;
+ $TickAlpha = isset($Format["TickAlpha"]) ? $Format["TickAlpha"] : 100;
+ $DrawSubTicks = isset($Format["DrawSubTicks"]) ? $Format["DrawSubTicks"] : FALSE;
+ $InnerSubTickWidth = isset($Format["InnerSubTickWidth"]) ? $Format["InnerSubTickWidth"] : 0;
+ $OuterSubTickWidth = isset($Format["OuterSubTickWidth"]) ? $Format["OuterSubTickWidth"] : 2;
+ $SubTickR = isset($Format["SubTickR"]) ? $Format["SubTickR"] : 255;
+ $SubTickG = isset($Format["SubTickG"]) ? $Format["SubTickG"] : 0;
+ $SubTickB = isset($Format["SubTickB"]) ? $Format["SubTickB"] : 0;
+ $SubTickAlpha = isset($Format["SubTickAlpha"]) ? $Format["SubTickAlpha"] : 100;
+ $AutoAxisLabels = isset($Format["AutoAxisLabels"]) ? $Format["AutoAxisLabels"] : TRUE;
+ $XReleasePercent = isset($Format["XReleasePercent"]) ? $Format["XReleasePercent"] : 1;
+ $DrawArrows = isset($Format["DrawArrows"]) ? $Format["DrawArrows"] : FALSE;
+ $ArrowSize = isset($Format["ArrowSize"]) ? $Format["ArrowSize"] : 8;
+ $CycleBackground = isset($Format["CycleBackground"]) ? $Format["CycleBackground"] : FALSE;
+ $BackgroundR1 = isset($Format["BackgroundR1"]) ? $Format["BackgroundR1"] : 255;
+ $BackgroundG1 = isset($Format["BackgroundG1"]) ? $Format["BackgroundG1"] : 255;
+ $BackgroundB1 = isset($Format["BackgroundB1"]) ? $Format["BackgroundB1"] : 255;
+ $BackgroundAlpha1 = isset($Format["BackgroundAlpha1"]) ? $Format["BackgroundAlpha1"] : 20;
+ $BackgroundR2 = isset($Format["BackgroundR2"]) ? $Format["BackgroundR2"] : 230;
+ $BackgroundG2 = isset($Format["BackgroundG2"]) ? $Format["BackgroundG2"] : 230;
+ $BackgroundB2 = isset($Format["BackgroundB2"]) ? $Format["BackgroundB2"] : 230;
+ $BackgroundAlpha2 = isset($Format["BackgroundAlpha2"]) ? $Format["BackgroundAlpha2"] : 20;
+ $LabelingMethod = isset($Format["LabelingMethod"]) ? $Format["LabelingMethod"] : LABELING_ALL;
+ $LabelSkip = isset($Format["LabelSkip"]) ? $Format["LabelSkip"] : 0;
+ $LabelRotation = isset($Format["LabelRotation"]) ? $Format["LabelRotation"] : 0;
+ $SkippedAxisTicks = isset($Format["SkippedAxisTicks"]) ? $Format["SkippedAxisTicks"] : $GridTicks+2;
+ $SkippedAxisR = isset($Format["SkippedAxisR"]) ? $Format["SkippedAxisR"] : $GridR;
+ $SkippedAxisG = isset($Format["SkippedAxisG"]) ? $Format["SkippedAxisG"] : $GridG;
+ $SkippedAxisB = isset($Format["SkippedAxisB"]) ? $Format["SkippedAxisB"] : $GridB;
+ $SkippedAxisAlpha = isset($Format["SkippedAxisAlpha"]) ? $Format["SkippedAxisAlpha"] : $GridAlpha-30;
+ $SkippedTickR = isset($Format["SkippedTickR"]) ? $Format["SkippedTickR"] : $TickRo;
+ $SkippedTickG = isset($Format["SkippedTickG"]) ? $Format["SkippedTickG"] : $TickGo;
+ $SkippedTickB = isset($Format["SkippedTicksB"]) ? $Format["SkippedTickB"] : $TickBo;
+ $SkippedTickAlpha = isset($Format["SkippedTickAlpha"]) ? $Format["SkippedTickAlpha"] : $TickAlpha-80;
+ $SkippedInnerTickWidth = isset($Format["SkippedInnerTickWidth"]) ? $Format["SkippedInnerTickWidth"] : 0;
+ $SkippedOuterTickWidth = isset($Format["SkippedOuterTickWidth"]) ? $Format["SkippedOuterTickWidth"] : 2;
+
+ /* Floating scale require X & Y margins to be set manually */
+ if ( $Floating && ( $XMargin == AUTO || $YMargin == 0 ) ) { $Floating = FALSE; }
+
+ /* Skip a NOTICE event in case of an empty array */
+ if ( $DrawYLines == NONE || $DrawYLines == FALSE ) { $DrawYLines = array("zarma"=>"31"); }
+
+ /* Define the color for the skipped elements */
+ $SkippedAxisColor = array("R"=>$SkippedAxisR,"G"=>$SkippedAxisG,"B"=>$SkippedAxisB,"Alpha"=>$SkippedAxisAlpha,"Ticks"=>$SkippedAxisTicks);
+ $SkippedTickColor = array("R"=>$SkippedTickR,"G"=>$SkippedTickG,"B"=>$SkippedTickB,"Alpha"=>$SkippedTickAlpha);
+
+ $Data = $this->DataSet->getData();
+ if ( isset($Data["Abscissa"]) ) { $Abscissa = $Data["Abscissa"]; } else { $Abscissa = NULL; }
+
+ /* Unset the abscissa axis, needed if we display multiple charts on the same picture */
+ if ( $Abscissa != NULL )
+ {
+ foreach($Data["Axis"] as $AxisID => $Parameters)
+ { if ($Parameters["Identity"] == AXIS_X) { unset($Data["Axis"][$AxisID]); } }
+ }
+
+ /* Build the scale settings */
+ $GotXAxis = FALSE;
+ foreach($Data["Axis"] as $AxisID => $AxisParameter)
+ {
+ if ( $AxisParameter["Identity"] == AXIS_X ) { $GotXAxis = TRUE; }
+
+ if ( $Pos == SCALE_POS_LEFTRIGHT && $AxisParameter["Identity"] == AXIS_Y)
+ { $Height = $this->GraphAreaY2-$this->GraphAreaY1 - $YMargin*2; }
+ elseif ( $Pos == SCALE_POS_LEFTRIGHT && $AxisParameter["Identity"] == AXIS_X)
+ { $Height = $this->GraphAreaX2-$this->GraphAreaX1; }
+ elseif ( $Pos == SCALE_POS_TOPBOTTOM && $AxisParameter["Identity"] == AXIS_Y)
+ { $Height = $this->GraphAreaX2-$this->GraphAreaX1 - $YMargin*2;; }
+ else
+ { $Height = $this->GraphAreaY2-$this->GraphAreaY1; }
+
+ $AxisMin = ABSOLUTE_MAX; $AxisMax = OUT_OF_SIGHT;
+ if ( $Mode == SCALE_MODE_FLOATING || $Mode == SCALE_MODE_START0 )
+ {
+ foreach($Data["Series"] as $SerieID => $SerieParameter)
+ {
+ if ( $SerieParameter["Axis"] == $AxisID && $Data["Series"][$SerieID]["isDrawable"] && $Data["Abscissa"] != $SerieID)
+ {
+ $AxisMax = max($AxisMax,$Data["Series"][$SerieID]["Max"]);
+ $AxisMin = min($AxisMin,$Data["Series"][$SerieID]["Min"]);
+ }
+ }
+ $AutoMargin = (($AxisMax-$AxisMin)/100)*$XReleasePercent;
+
+ $Data["Axis"][$AxisID]["Min"] = $AxisMin-$AutoMargin; $Data["Axis"][$AxisID]["Max"] = $AxisMax+$AutoMargin;
+ if ( $Mode == SCALE_MODE_START0 ) { $Data["Axis"][$AxisID]["Min"] = 0; }
+ }
+ elseif ( $Mode == SCALE_MODE_MANUAL )
+ {
+ if ( isset($ManualScale[$AxisID]["Min"]) && isset($ManualScale[$AxisID]["Max"]) )
+ {
+ $Data["Axis"][$AxisID]["Min"] = $ManualScale[$AxisID]["Min"];
+ $Data["Axis"][$AxisID]["Max"] = $ManualScale[$AxisID]["Max"];
+ }
+ else
+ { echo "Manual scale boundaries not set."; exit(); }
+ }
+ elseif ( $Mode == SCALE_MODE_ADDALL || $Mode == SCALE_MODE_ADDALL_START0 )
+ {
+ $Series = "";
+ foreach($Data["Series"] as $SerieID => $SerieParameter)
+ { if ( $SerieParameter["Axis"] == $AxisID && $SerieParameter["isDrawable"] && $Data["Abscissa"] != $SerieID ) { $Series[$SerieID] = count($Data["Series"][$SerieID]["Data"]); } }
+
+ for ($ID=0;$ID<=max($Series)-1;$ID++)
+ {
+ $PointMin = 0; $PointMax = 0;
+ foreach($Series as $SerieID => $ValuesCount )
+ {
+ if (isset($Data["Series"][$SerieID]["Data"][$ID]) && $Data["Series"][$SerieID]["Data"][$ID] != NULL )
+ {
+ $Value = $Data["Series"][$SerieID]["Data"][$ID];
+ if ( $Value > 0 ) { $PointMax = $PointMax + $Value; } else { $PointMin = $PointMin + $Value; }
+ }
+ }
+ $AxisMax = max($AxisMax,$PointMax);
+ $AxisMin = min($AxisMin,$PointMin);
+ }
+ $AutoMargin = (($AxisMax-$AxisMin)/100)*$XReleasePercent;
+ $Data["Axis"][$AxisID]["Min"] = $AxisMin-$AutoMargin; $Data["Axis"][$AxisID]["Max"] = $AxisMax+$AutoMargin;
+ }
+ $MaxDivs = floor($Height/$MinDivHeight);
+
+ if ( $Mode == SCALE_MODE_ADDALL_START0 ) { $Data["Axis"][$AxisID]["Min"] = 0; }
+
+ $Scale = $this->computeScale($Data["Axis"][$AxisID]["Min"],$Data["Axis"][$AxisID]["Max"],$MaxDivs,$Factors,$AxisID);
+
+ $Data["Axis"][$AxisID]["Margin"] = $AxisParameter["Identity"] == AXIS_X ? $XMargin : $YMargin;
+ $Data["Axis"][$AxisID]["ScaleMin"] = $Scale["XMin"];
+ $Data["Axis"][$AxisID]["ScaleMax"] = $Scale["XMax"];
+ $Data["Axis"][$AxisID]["Rows"] = $Scale["Rows"];
+ $Data["Axis"][$AxisID]["RowHeight"] = $Scale["RowHeight"];
+
+ if ( isset($Scale["Format"]) ) { $Data["Axis"][$AxisID]["Format"] = $Scale["Format"]; }
+
+ if ( !isset($Data["Axis"][$AxisID]["Display"]) ) { $Data["Axis"][$AxisID]["Display"] = NULL; }
+ if ( !isset($Data["Axis"][$AxisID]["Format"]) ) { $Data["Axis"][$AxisID]["Format"] = NULL; }
+ if ( !isset($Data["Axis"][$AxisID]["Unit"]) ) { $Data["Axis"][$AxisID]["Unit"] = NULL; }
+ }
+
+ /* Still no X axis */
+ if ( $GotXAxis == FALSE )
+ {
+ if ( $Abscissa != NULL )
+ {
+ $Points = count($Data["Series"][$Abscissa]["Data"]);
+ if ( $AutoAxisLabels )
+ $AxisName = isset($Data["Series"][$Abscissa]["Description"]) ? $Data["Series"][$Abscissa]["Description"] : NULL;
+ else
+ $AxisName = NULL;
+ }
+ else
+ {
+ $Points = 0;
+ $AxisName = isset($Data["XAxisName"]) ? $Data["XAxisName"] : NULL;
+ foreach($Data["Series"] as $SerieID => $SerieParameter)
+ { if ( $SerieParameter["isDrawable"] ) { $Points = max($Points,count($SerieParameter["Data"])); } }
+ }
+
+ $AxisID = count($Data["Axis"]);
+ $Data["Axis"][$AxisID]["Identity"] = AXIS_X;
+ if ( $Pos == SCALE_POS_LEFTRIGHT ) { $Data["Axis"][$AxisID]["Position"] = AXIS_POSITION_BOTTOM; } else { $Data["Axis"][$AxisID]["Position"] = AXIS_POSITION_LEFT; }
+ if ( isset($Data["AbscissaName"]) ) { $Data["Axis"][$AxisID]["Name"] = $Data["AbscissaName"]; }
+ if ( $XMargin == AUTO )
+ {
+ if ( $Pos == SCALE_POS_LEFTRIGHT )
+ { $Height = $this->GraphAreaX2-$this->GraphAreaX1; }
+ else
+ { $Height = $this->GraphAreaY2-$this->GraphAreaY1; }
+
+ if ( $Points == 1 )
+ $Data["Axis"][$AxisID]["Margin"] = $Height / 2;
+ else
+ $Data["Axis"][$AxisID]["Margin"] = ($Height/$Points) / 2;
+ }
+ else
+ { $Data["Axis"][$AxisID]["Margin"] = $XMargin; }
+ $Data["Axis"][$AxisID]["Rows"] = $Points-1;
+ if ( !isset($Data["Axis"][$AxisID]["Display"]) ) { $Data["Axis"][$AxisID]["Display"] = NULL; }
+ if ( !isset($Data["Axis"][$AxisID]["Format"]) ) { $Data["Axis"][$AxisID]["Format"] = NULL; }
+ if ( !isset($Data["Axis"][$AxisID]["Unit"]) ) { $Data["Axis"][$AxisID]["Unit"] = NULL; }
+ }
+
+ $this->DataSet->saveOrientation($Pos);
+ $this->DataSet->saveAxisConfig($Data["Axis"]);
+ $this->DataSet->saveYMargin($YMargin);
+
+ $FontColorRo = $this->FontColorR; $FontColorGo = $this->FontColorG; $FontColorBo = $this->FontColorB;
+
+ $AxisPos["L"] = $this->GraphAreaX1; $AxisPos["R"] = $this->GraphAreaX2; $AxisPos["T"] = $this->GraphAreaY1; $AxisPos["B"] = $this->GraphAreaY2;
+ foreach($Data["Axis"] as $AxisID => $Parameters)
+ {
+ if ( isset($Parameters["Color"]) )
+ {
+ $AxisR = $Parameters["Color"]["R"]; $AxisG = $Parameters["Color"]["G"]; $AxisB = $Parameters["Color"]["B"];
+ $TickR = $Parameters["Color"]["R"]; $TickG = $Parameters["Color"]["G"]; $TickB = $Parameters["Color"]["B"];
+ $this->setFontProperties(array("R"=>$Parameters["Color"]["R"],"G"=>$Parameters["Color"]["G"],"B"=>$Parameters["Color"]["B"]));
+ }
+ else
+ {
+ $AxisR = $AxisRo; $AxisG = $AxisGo; $AxisB = $AxisBo;
+ $TickR = $TickRo; $TickG = $TickGo; $TickB = $TickBo;
+ $this->setFontProperties(array("R"=>$FontColorRo,"G"=>$FontColorGo,"B"=>$FontColorBo));
+ }
+
+ $LastValue = "w00t"; $ID = 1;
+ if ( $Parameters["Identity"] == AXIS_X )
+ {
+ if ( $Pos == SCALE_POS_LEFTRIGHT )
+ {
+ if ( $Parameters["Position"] == AXIS_POSITION_BOTTOM )
+ {
+ if ( $LabelRotation == 0 ) { $LabelAlign = TEXT_ALIGN_TOPMIDDLE; $YLabelOffset = 2; }
+ if ( $LabelRotation > 0 && $LabelRotation < 190 ) { $LabelAlign = TEXT_ALIGN_MIDDLERIGHT; $YLabelOffset = 5; }
+ if ( $LabelRotation == 180 ) { $LabelAlign = TEXT_ALIGN_BOTTOMMIDDLE; $YLabelOffset = 5; }
+ if ( $LabelRotation > 180 && $LabelRotation < 360 ) { $LabelAlign = TEXT_ALIGN_MIDDLELEFT; $YLabelOffset = 2; }
+
+ if ( $Floating )
+ { $FloatingOffset = $YMargin; $this->drawLine($this->GraphAreaX1+$Parameters["Margin"],$AxisPos["B"],$this->GraphAreaX2-$Parameters["Margin"],$AxisPos["B"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
+ else
+ { $FloatingOffset = 0; $this->drawLine($this->GraphAreaX1,$AxisPos["B"],$this->GraphAreaX2,$AxisPos["B"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
+
+ if ( $DrawArrows ) { $this->drawArrow($this->GraphAreaX2-$Parameters["Margin"],$AxisPos["B"],$this->GraphAreaX2+($ArrowSize*2),$AxisPos["B"],array("FillR"=>$AxisR,"FillG"=>$AxisG,"FillB"=>$AxisB,"Size"=>$ArrowSize)); }
+
+ $Width = ($this->GraphAreaX2 - $this->GraphAreaX1) - $Parameters["Margin"]*2;
+
+ if ($Parameters["Rows"] == 0 ) { $Step = $Width; } else { $Step = $Width / ($Parameters["Rows"]); }
+
+ $MaxBottom = $AxisPos["B"];
+ for($i=0;$i<=$Parameters["Rows"];$i++)
+ {
+ $XPos = $this->GraphAreaX1 + $Parameters["Margin"] + $Step*$i;
+ $YPos = $AxisPos["B"];
+
+ if ( $Abscissa != NULL )
+ { if ( isset($Data["Series"][$Abscissa]["Data"][$i]) ) { $Value = $this->scaleFormat($Data["Series"][$Abscissa]["Data"][$i],$Data["XAxisDisplay"],$Data["XAxisFormat"],$Data["XAxisUnit"]); } else { $Value = ""; } }
+ else
+ {
+ if ( isset($Parameters["ScaleMin"]) && isset ($Parameters["RowHeight"]) )
+ $Value = $this->scaleFormat($Parameters["ScaleMin"] + $Parameters["RowHeight"]*$i,$Data["XAxisDisplay"],$Data["XAxisFormat"],$Data["XAxisUnit"]);
+ else
+ $Value = $i;
+ }
+
+ $ID++; $Skipped = TRUE;
+ if ( $this->isValidLabel($Value,$LastValue,$LabelingMethod,$ID,$LabelSkip) )
+ {
+ $Bounds = $this->drawText($XPos,$YPos+$OuterTickWidth+$YLabelOffset,$Value,array("Angle"=>$LabelRotation,"Align"=>$LabelAlign));
+ $TxtBottom = $YPos+$OuterTickWidth+2+($Bounds[0]["Y"]-$Bounds[2]["Y"]);
+ $MaxBottom = max($MaxBottom,$TxtBottom);
+ $LastValue = $Value;
+ $Skipped = FALSE;
+ }
+
+ if ( $Skipped )
+ {
+ if ( $DrawXLines ) { $this->drawLine($XPos,$this->GraphAreaY1+$FloatingOffset,$XPos,$this->GraphAreaY2-$FloatingOffset,$SkippedAxisColor); }
+ if ( $SkippedInnerTickWidth !=0 || $SkippedOuterTickWidth != 0 ) { $this->drawLine($XPos,$YPos-$SkippedInnerTickWidth,$XPos,$YPos+$SkippedOuterTickWidth,$SkippedTickColor); }
+ }
+ else
+ {
+ if ( $DrawXLines && ($XPos != $this->GraphAreaX1 && $XPos != $this->GraphAreaX2) ) { $this->drawLine($XPos,$this->GraphAreaY1+$FloatingOffset,$XPos,$this->GraphAreaY2-$FloatingOffset,array("R"=>$GridR,"G"=>$GridG,"B"=>$GridB,"Alpha"=>$GridAlpha,"Ticks"=>$GridTicks)); }
+ if ( $InnerTickWidth !=0 || $OuterTickWidth != 0 ) { $this->drawLine($XPos,$YPos-$InnerTickWidth,$XPos,$YPos+$OuterTickWidth,array("R"=>$TickR,"G"=>$TickG,"B"=>$TickB,"Alpha"=>$TickAlpha)); }
+ }
+
+ }
+ if ( isset($Parameters["Name"]) )
+ {
+ $YPos = $MaxBottom+2;
+ $XPos = $this->GraphAreaX1+($this->GraphAreaX2-$this->GraphAreaX1)/2;
+ $Bounds = $this->drawText($XPos,$YPos,$Parameters["Name"],array("Align"=>TEXT_ALIGN_TOPMIDDLE));
+ $MaxBottom = $Bounds[0]["Y"];
+
+ $this->DataSet->Data["GraphArea"]["Y2"] = $MaxBottom + $this->FontSize;
+ }
+
+ $AxisPos["B"] = $MaxBottom + $ScaleSpacing;
+ }
+ elseif ( $Parameters["Position"] == AXIS_POSITION_TOP )
+ {
+ if ( $LabelRotation == 0 ) { $LabelAlign = TEXT_ALIGN_BOTTOMMIDDLE; $YLabelOffset = 2; }
+ if ( $LabelRotation > 0 && $LabelRotation < 190 ) { $LabelAlign = TEXT_ALIGN_MIDDLELEFT; $YLabelOffset = 2; }
+ if ( $LabelRotation == 180 ) { $LabelAlign = TEXT_ALIGN_TOPMIDDLE; $YLabelOffset = 5; }
+ if ( $LabelRotation > 180 && $LabelRotation < 360 ) { $LabelAlign = TEXT_ALIGN_MIDDLERIGHT; $YLabelOffset = 5; }
+
+ if ( $Floating )
+ { $FloatingOffset = $YMargin; $this->drawLine($this->GraphAreaX1+$Parameters["Margin"],$AxisPos["T"],$this->GraphAreaX2-$Parameters["Margin"],$AxisPos["T"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
+ else
+ { $FloatingOffset = 0; $this->drawLine($this->GraphAreaX1,$AxisPos["T"],$this->GraphAreaX2,$AxisPos["T"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
+
+ if ( $DrawArrows ) { $this->drawArrow($this->GraphAreaX2-$Parameters["Margin"],$AxisPos["T"],$this->GraphAreaX2+($ArrowSize*2),$AxisPos["T"],array("FillR"=>$AxisR,"FillG"=>$AxisG,"FillB"=>$AxisB,"Size"=>$ArrowSize)); }
+
+ $Width = ($this->GraphAreaX2 - $this->GraphAreaX1) - $Parameters["Margin"]*2;
+
+ if ($Parameters["Rows"] == 0 ) { $Step = $Width; } else { $Step = $Width / $Parameters["Rows"]; }
+
+ $MinTop = $AxisPos["T"];
+ for($i=0;$i<=$Parameters["Rows"];$i++)
+ {
+ $XPos = $this->GraphAreaX1 + $Parameters["Margin"] + $Step*$i;
+ $YPos = $AxisPos["T"];
+
+ if ( $Abscissa != NULL )
+ { if ( isset($Data["Series"][$Abscissa]["Data"][$i]) ) { $Value = $this->scaleFormat($Data["Series"][$Abscissa]["Data"][$i],$Data["XAxisDisplay"],$Data["XAxisFormat"],$Data["XAxisUnit"]); } else { $Value = ""; } }
+ else
+ {
+ if ( isset($Parameters["ScaleMin"]) && isset ($Parameters["RowHeight"]) )
+ $Value = $this->scaleFormat($Parameters["ScaleMin"] + $Parameters["RowHeight"]*$i,$Data["XAxisDisplay"],$Data["XAxisFormat"],$Data["XAxisUnit"]);
+ else
+ $Value = $i;
+ }
+
+ $ID++; $Skipped = TRUE;
+ if ( $this->isValidLabel($Value,$LastValue,$LabelingMethod,$ID,$LabelSkip) )
+ {
+ $Bounds = $this->drawText($XPos,$YPos-$OuterTickWidth-$YLabelOffset,$Value,array("Angle"=>$LabelRotation,"Align"=>$LabelAlign));
+ $TxtBox = $YPos-$OuterTickWidth-2-($Bounds[0]["Y"]-$Bounds[2]["Y"]);
+ $MinTop = min($MinTop,$TxtBox);
+ $LastValue = $Value;
+ $Skipped = FALSE;
+ }
+
+ if ( $Skipped )
+ {
+ if ( $DrawXLines ) { $this->drawLine($XPos,$this->GraphAreaY1+$FloatingOffset,$XPos,$this->GraphAreaY2-$FloatingOffset,$SkippedAxisColor); }
+ if ( $SkippedInnerTickWidth !=0 || $SkippedOuterTickWidth != 0 ) { $this->drawLine($XPos,$YPos+$SkippedInnerTickWidth,$XPos,$YPos-$SkippedOuterTickWidth,$SkippedTickColor); }
+ }
+ else
+ {
+ if ( $DrawXLines ) { $this->drawLine($XPos,$this->GraphAreaY1+$FloatingOffset,$XPos,$this->GraphAreaY2-$FloatingOffset,array("R"=>$GridR,"G"=>$GridG,"B"=>$GridB,"Alpha"=>$GridAlpha,"Ticks"=>$GridTicks)); }
+ if ( $InnerTickWidth !=0 || $OuterTickWidth != 0 ) { $this->drawLine($XPos,$YPos+$InnerTickWidth,$XPos,$YPos-$OuterTickWidth,array("R"=>$TickR,"G"=>$TickG,"B"=>$TickB,"Alpha"=>$TickAlpha)); }
+ }
+
+ }
+ if ( isset($Parameters["Name"]) )
+ {
+ $YPos = $MinTop-2;
+ $XPos = $this->GraphAreaX1+($this->GraphAreaX2-$this->GraphAreaX1)/2;
+ $Bounds = $this->drawText($XPos,$YPos,$Parameters["Name"],array("Align"=>TEXT_ALIGN_BOTTOMMIDDLE));
+ $MinTop = $Bounds[2]["Y"];
+
+ $this->DataSet->Data["GraphArea"]["Y1"] = $MinTop;
+ }
+
+ $AxisPos["T"] = $MinTop - $ScaleSpacing;
+ }
+ }
+ elseif ( $Pos == SCALE_POS_TOPBOTTOM )
+ {
+ if ( $Parameters["Position"] == AXIS_POSITION_LEFT )
+ {
+ if ( $LabelRotation == 0 ) { $LabelAlign = TEXT_ALIGN_MIDDLERIGHT; $XLabelOffset = -2; }
+ if ( $LabelRotation > 0 && $LabelRotation < 190 ) { $LabelAlign = TEXT_ALIGN_MIDDLERIGHT; $XLabelOffset = -6; }
+ if ( $LabelRotation == 180 ) { $LabelAlign = TEXT_ALIGN_MIDDLELEFT; $XLabelOffset = -2; }
+ if ( $LabelRotation > 180 && $LabelRotation < 360 ) { $LabelAlign = TEXT_ALIGN_MIDDLELEFT; $XLabelOffset = -5; }
+
+ if ( $Floating )
+ { $FloatingOffset = $YMargin; $this->drawLine($AxisPos["L"],$this->GraphAreaY1+$Parameters["Margin"],$AxisPos["L"],$this->GraphAreaY2-$Parameters["Margin"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
+ else
+ { $FloatingOffset = 0; $this->drawLine($AxisPos["L"],$this->GraphAreaY1,$AxisPos["L"],$this->GraphAreaY2,array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
+
+ if ( $DrawArrows ) { $this->drawArrow($AxisPos["L"],$this->GraphAreaY2-$Parameters["Margin"],$AxisPos["L"],$this->GraphAreaY2+($ArrowSize*2),array("FillR"=>$AxisR,"FillG"=>$AxisG,"FillB"=>$AxisB,"Size"=>$ArrowSize)); }
+
+ $Height = ($this->GraphAreaY2 - $this->GraphAreaY1) - $Parameters["Margin"]*2;
+
+ if ($Parameters["Rows"] == 0 ) { $Step = $Height; } else { $Step = $Height / $Parameters["Rows"]; }
+
+ $MinLeft = $AxisPos["L"];
+ for($i=0;$i<=$Parameters["Rows"];$i++)
+ {
+ $YPos = $this->GraphAreaY1 + $Parameters["Margin"] + $Step*$i;
+ $XPos = $AxisPos["L"];
+
+ if ( $Abscissa != NULL )
+ { if ( isset($Data["Series"][$Abscissa]["Data"][$i]) ) { $Value = $this->scaleFormat($Data["Series"][$Abscissa]["Data"][$i],$Data["XAxisDisplay"],$Data["XAxisFormat"],$Data["XAxisUnit"]); } else { $Value = ""; } }
+ else
+ {
+ if ( isset($Parameters["ScaleMin"]) && isset ($Parameters["RowHeight"]) )
+ $Value = $this->scaleFormat($Parameters["ScaleMin"] + $Parameters["RowHeight"]*$i,$Data["XAxisDisplay"],$Data["XAxisFormat"],$Data["XAxisUnit"]);
+ else
+ $Value = $i;
+ }
+
+ $ID++; $Skipped = TRUE;
+ if ( $this->isValidLabel($Value,$LastValue,$LabelingMethod,$ID,$LabelSkip) )
+ {
+ $Bounds = $this->drawText($XPos-$OuterTickWidth+$XLabelOffset,$YPos,$Value,array("Angle"=>$LabelRotation,"Align"=>$LabelAlign));
+ $TxtBox = $XPos-$OuterTickWidth-2-($Bounds[1]["X"]-$Bounds[0]["X"]);
+ $MinLeft = min($MinLeft,$TxtBox);
+ $LastValue = $Value;
+ $Skipped = FALSE;
+ }
+
+ if ( $Skipped )
+ {
+ if ( $DrawXLines ) { $this->drawLine($this->GraphAreaX1+$FloatingOffset,$YPos,$this->GraphAreaX2-$FloatingOffset,$YPos,$SkippedAxisColor); }
+ if ( $SkippedInnerTickWidth !=0 || $SkippedOuterTickWidth != 0 ) { $this->drawLine($XPos-$SkippedOuterTickWidth,$YPos,$XPos+$SkippedInnerTickWidth,$YPos,$SkippedTickColor); }
+ }
+ else
+ {
+ if ( $DrawXLines && ($YPos != $this->GraphAreaY1 && $YPos != $this->GraphAreaY2) ) { $this->drawLine($this->GraphAreaX1+$FloatingOffset,$YPos,$this->GraphAreaX2-$FloatingOffset,$YPos,array("R"=>$GridR,"G"=>$GridG,"B"=>$GridB,"Alpha"=>$GridAlpha,"Ticks"=>$GridTicks)); }
+ if ( $InnerTickWidth !=0 || $OuterTickWidth != 0 ) { $this->drawLine($XPos-$OuterTickWidth,$YPos,$XPos+$InnerTickWidth,$YPos,array("R"=>$TickR,"G"=>$TickG,"B"=>$TickB,"Alpha"=>$TickAlpha)); }
+ }
+
+ }
+ if ( isset($Parameters["Name"]) )
+ {
+ $XPos = $MinLeft-2;
+ $YPos = $this->GraphAreaY1+($this->GraphAreaY2-$this->GraphAreaY1)/2;
+ $Bounds = $this->drawText($XPos,$YPos,$Parameters["Name"],array("Align"=>TEXT_ALIGN_BOTTOMMIDDLE,"Angle"=>90));
+ $MinLeft = $Bounds[0]["X"];
+
+ $this->DataSet->Data["GraphArea"]["X1"] = $MinLeft;
+ }
+
+ $AxisPos["L"] = $MinLeft - $ScaleSpacing;
+ }
+ elseif ( $Parameters["Position"] == AXIS_POSITION_RIGHT )
+ {
+ if ( $LabelRotation == 0 ) { $LabelAlign = TEXT_ALIGN_MIDDLELEFT; $XLabelOffset = 2; }
+ if ( $LabelRotation > 0 && $LabelRotation < 190 ) { $LabelAlign = TEXT_ALIGN_MIDDLELEFT; $XLabelOffset = 6; }
+ if ( $LabelRotation == 180 ) { $LabelAlign = TEXT_ALIGN_MIDDLERIGHT; $XLabelOffset = 5; }
+ if ( $LabelRotation > 180 && $LabelRotation < 360 ) { $LabelAlign = TEXT_ALIGN_MIDDLERIGHT; $XLabelOffset = 7; }
+
+ if ( $Floating )
+ { $FloatingOffset = $YMargin; $this->drawLine($AxisPos["R"],$this->GraphAreaY1+$Parameters["Margin"],$AxisPos["R"],$this->GraphAreaY2-$Parameters["Margin"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
+ else
+ { $FloatingOffset = 0; $this->drawLine($AxisPos["R"],$this->GraphAreaY1,$AxisPos["R"],$this->GraphAreaY2,array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
+
+ if ( $DrawArrows ) { $this->drawArrow($AxisPos["R"],$this->GraphAreaY2-$Parameters["Margin"],$AxisPos["R"],$this->GraphAreaY2+($ArrowSize*2),array("FillR"=>$AxisR,"FillG"=>$AxisG,"FillB"=>$AxisB,"Size"=>$ArrowSize)); }
+
+ $Height = ($this->GraphAreaY2 - $this->GraphAreaY1) - $Parameters["Margin"]*2;
+
+ if ($Parameters["Rows"] == 0 ) { $Step = $Height; } else { $Step = $Height / $Parameters["Rows"]; }
+
+ $MaxRight = $AxisPos["R"];
+ for($i=0;$i<=$Parameters["Rows"];$i++)
+ {
+ $YPos = $this->GraphAreaY1 + $Parameters["Margin"] + $Step*$i;
+ $XPos = $AxisPos["R"];
+
+ if ( $Abscissa != NULL )
+ { if ( isset($Data["Series"][$Abscissa]["Data"][$i]) ) { $Value = $this->scaleFormat($Data["Series"][$Abscissa]["Data"][$i],$Data["XAxisDisplay"],$Data["XAxisFormat"],$Data["XAxisUnit"]); } else { $Value = ""; } }
+ else
+ {
+ if ( isset($Parameters["ScaleMin"]) && isset ($Parameters["RowHeight"]) )
+ $Value = $this->scaleFormat($Parameters["ScaleMin"] + $Parameters["RowHeight"]*$i,$Data["XAxisDisplay"],$Data["XAxisFormat"],$Data["XAxisUnit"]);
+ else
+ $Value = $i;
+ }
+
+ $ID++; $Skipped = TRUE;
+ if ( $this->isValidLabel($Value,$LastValue,$LabelingMethod,$ID,$LabelSkip) )
+ {
+ $Bounds = $this->drawText($XPos+$OuterTickWidth+$XLabelOffset,$YPos,$Value,array("Angle"=>$LabelRotation,"Align"=>$LabelAlign));
+ $TxtBox = $XPos+$OuterTickWidth+2+($Bounds[1]["X"]-$Bounds[0]["X"]);
+ $MaxRight = max($MaxRight,$TxtBox);
+ $LastValue = $Value;
+ $Skipped = FALSE;
+ }
+
+ if ( $Skipped )
+ {
+ if ( $DrawXLines ) { $this->drawLine($this->GraphAreaX1+$FloatingOffset,$YPos,$this->GraphAreaX2-$FloatingOffset,$YPos,$SkippedAxisColor); }
+ if ( $SkippedInnerTickWidth !=0 || $SkippedOuterTickWidth != 0 ) { $this->drawLine($XPos+$SkippedOuterTickWidth,$YPos,$XPos-$SkippedInnerTickWidth,$YPos,$SkippedTickColor); }
+ }
+ else
+ {
+ if ( $DrawXLines ) { $this->drawLine($this->GraphAreaX1+$FloatingOffset,$YPos,$this->GraphAreaX2-$FloatingOffset,$YPos,array("R"=>$GridR,"G"=>$GridG,"B"=>$GridB,"Alpha"=>$GridAlpha,"Ticks"=>$GridTicks)); }
+ if ( $InnerTickWidth !=0 || $OuterTickWidth != 0 ) { $this->drawLine($XPos+$OuterTickWidth,$YPos,$XPos-$InnerTickWidth,$YPos,array("R"=>$TickR,"G"=>$TickG,"B"=>$TickB,"Alpha"=>$TickAlpha)); }
+ }
+
+ }
+ if ( isset($Parameters["Name"]) )
+ {
+ $XPos = $MaxRight+4;
+ $YPos = $this->GraphAreaY1+($this->GraphAreaY2-$this->GraphAreaY1)/2;
+ $Bounds = $this->drawText($XPos,$YPos,$Parameters["Name"],array("Align"=>TEXT_ALIGN_BOTTOMMIDDLE,"Angle"=>270));
+ $MaxRight = $Bounds[1]["X"];
+
+ $this->DataSet->Data["GraphArea"]["X2"] = $MaxRight + $this->FontSize;
+ }
+
+ $AxisPos["R"] = $MaxRight + $ScaleSpacing;
+ }
+ }
+ }
+
+
+
+ if ( $Parameters["Identity"] == AXIS_Y )
+ {
+ if ( $Pos == SCALE_POS_LEFTRIGHT )
+ {
+ if ( $Parameters["Position"] == AXIS_POSITION_LEFT )
+ {
+
+ if ( $Floating )
+ { $FloatingOffset = $XMargin; $this->drawLine($AxisPos["L"],$this->GraphAreaY1+$Parameters["Margin"],$AxisPos["L"],$this->GraphAreaY2-$Parameters["Margin"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
+ else
+ { $FloatingOffset = 0; $this->drawLine($AxisPos["L"],$this->GraphAreaY1,$AxisPos["L"],$this->GraphAreaY2,array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
+
+ if ( $DrawArrows ) { $this->drawArrow($AxisPos["L"],$this->GraphAreaY1+$Parameters["Margin"],$AxisPos["L"],$this->GraphAreaY1-($ArrowSize*2),array("FillR"=>$AxisR,"FillG"=>$AxisG,"FillB"=>$AxisB,"Size"=>$ArrowSize)); }
+
+ $Height = ($this->GraphAreaY2 - $this->GraphAreaY1) - $Parameters["Margin"]*2;
+ $Step = $Height / $Parameters["Rows"]; $SubTicksSize = $Step /2; $MinLeft = $AxisPos["L"];
+ $LastY = NULL;
+ for($i=0;$i<=$Parameters["Rows"];$i++)
+ {
+ $YPos = $this->GraphAreaY2 - $Parameters["Margin"] - $Step*$i;
+ $XPos = $AxisPos["L"];
+ $Value = $this->scaleFormat($Parameters["ScaleMin"] + $Parameters["RowHeight"]*$i,$Parameters["Display"],$Parameters["Format"],$Parameters["Unit"]);
+
+ if ( $i%2 == 1 ) { $BGColor = array("R"=>$BackgroundR1,"G"=>$BackgroundG1,"B"=>$BackgroundB1,"Alpha"=>$BackgroundAlpha1); } else { $BGColor = array("R"=>$BackgroundR2,"G"=>$BackgroundG2,"B"=>$BackgroundB2,"Alpha"=>$BackgroundAlpha2); }
+ if ( $LastY != NULL && $CycleBackground && ( $DrawYLines == ALL || in_array($AxisID,$DrawYLines) )) { $this->drawFilledRectangle($this->GraphAreaX1+$FloatingOffset,$LastY,$this->GraphAreaX2-$FloatingOffset,$YPos,$BGColor); }
+
+ if ( $DrawYLines == ALL || in_array($AxisID,$DrawYLines) ) { $this->drawLine($this->GraphAreaX1+$FloatingOffset,$YPos,$this->GraphAreaX2-$FloatingOffset,$YPos,array("R"=>$GridR,"G"=>$GridG,"B"=>$GridB,"Alpha"=>$GridAlpha,"Ticks"=>$GridTicks)); }
+
+ if ( $DrawSubTicks && $i != $Parameters["Rows"] )
+ $this->drawLine($XPos-$OuterSubTickWidth,$YPos-$SubTicksSize,$XPos+$InnerSubTickWidth,$YPos-$SubTicksSize,array("R"=>$SubTickR,"G"=>$SubTickG,"B"=>$SubTickB,"Alpha"=>$SubTickAlpha));
+
+ $this->drawLine($XPos-$OuterTickWidth,$YPos,$XPos+$InnerTickWidth,$YPos,array("R"=>$TickR,"G"=>$TickG,"B"=>$TickB,"Alpha"=>$TickAlpha));
+ $Bounds = $this->drawText($XPos-$OuterTickWidth-2,$YPos,$Value,array("Align"=>TEXT_ALIGN_MIDDLERIGHT));
+ $TxtLeft = $XPos-$OuterTickWidth-2-($Bounds[1]["X"]-$Bounds[0]["X"]);
+ $MinLeft = min($MinLeft,$TxtLeft);
+
+ $LastY = $YPos;
+ }
+
+ if ( isset($Parameters["Name"]) )
+ {
+ $XPos = $MinLeft-2;
+ $YPos = $this->GraphAreaY1+($this->GraphAreaY2-$this->GraphAreaY1)/2;
+ $Bounds = $this->drawText($XPos,$YPos,$Parameters["Name"],array("Align"=>TEXT_ALIGN_BOTTOMMIDDLE,"Angle"=>90));
+ $MinLeft = $Bounds[2]["X"];
+
+ $this->DataSet->Data["GraphArea"]["X1"] = $MinLeft;
+ }
+
+ $AxisPos["L"] = $MinLeft - $ScaleSpacing;
+ }
+ elseif ( $Parameters["Position"] == AXIS_POSITION_RIGHT )
+ {
+ if ( $Floating )
+ { $FloatingOffset = $XMargin; $this->drawLine($AxisPos["R"],$this->GraphAreaY1+$Parameters["Margin"],$AxisPos["R"],$this->GraphAreaY2-$Parameters["Margin"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
+ else
+ { $FloatingOffset = 0; $this->drawLine($AxisPos["R"],$this->GraphAreaY1,$AxisPos["R"],$this->GraphAreaY2,array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
+
+ if ( $DrawArrows ) { $this->drawArrow($AxisPos["R"],$this->GraphAreaY1+$Parameters["Margin"],$AxisPos["R"],$this->GraphAreaY1-($ArrowSize*2),array("FillR"=>$AxisR,"FillG"=>$AxisG,"FillB"=>$AxisB,"Size"=>$ArrowSize)); }
+
+ $Height = ($this->GraphAreaY2 - $this->GraphAreaY1) - $Parameters["Margin"]*2;
+ $Step = $Height / $Parameters["Rows"]; $SubTicksSize = $Step /2; $MaxLeft = $AxisPos["R"];
+ $LastY = NULL;
+ for($i=0;$i<=$Parameters["Rows"];$i++)
+ {
+ $YPos = $this->GraphAreaY2 - $Parameters["Margin"] - $Step*$i;
+ $XPos = $AxisPos["R"];
+ $Value = $this->scaleFormat($Parameters["ScaleMin"] + $Parameters["RowHeight"]*$i,$Parameters["Display"],$Parameters["Format"],$Parameters["Unit"]);
+
+ if ( $i%2 == 1 ) { $BGColor = array("R"=>$BackgroundR1,"G"=>$BackgroundG1,"B"=>$BackgroundB1,"Alpha"=>$BackgroundAlpha1); } else { $BGColor = array("R"=>$BackgroundR2,"G"=>$BackgroundG2,"B"=>$BackgroundB2,"Alpha"=>$BackgroundAlpha2); }
+ if ( $LastY != NULL && $CycleBackground && ( $DrawYLines == ALL || in_array($AxisID,$DrawYLines) )) { $this->drawFilledRectangle($this->GraphAreaX1+$FloatingOffset,$LastY,$this->GraphAreaX2-$FloatingOffset,$YPos,$BGColor); }
+
+ if ( $DrawYLines == ALL || in_array($AxisID,$DrawYLines) ) { $this->drawLine($this->GraphAreaX1+$FloatingOffset,$YPos,$this->GraphAreaX2-$FloatingOffset,$YPos,array("R"=>$GridR,"G"=>$GridG,"B"=>$GridB,"Alpha"=>$GridAlpha,"Ticks"=>$GridTicks)); }
+
+ if ( $DrawSubTicks && $i != $Parameters["Rows"] )
+ $this->drawLine($XPos-$OuterSubTickWidth,$YPos-$SubTicksSize,$XPos+$InnerSubTickWidth,$YPos-$SubTicksSize,array("R"=>$SubTickR,"G"=>$SubTickG,"B"=>$SubTickB,"Alpha"=>$SubTickAlpha));
+
+ $this->drawLine($XPos-$InnerTickWidth,$YPos,$XPos+$OuterTickWidth,$YPos,array("R"=>$TickR,"G"=>$TickG,"B"=>$TickB,"Alpha"=>$TickAlpha));
+ $Bounds = $this->drawText($XPos+$OuterTickWidth+2,$YPos,$Value,array("Align"=>TEXT_ALIGN_MIDDLELEFT));
+ $TxtLeft = $XPos+$OuterTickWidth+2+($Bounds[1]["X"]-$Bounds[0]["X"]);
+ $MaxLeft = max($MaxLeft,$TxtLeft);
+
+ $LastY = $YPos;
+ }
+
+ if ( isset($Parameters["Name"]) )
+ {
+ $XPos = $MaxLeft+6;
+ $YPos = $this->GraphAreaY1+($this->GraphAreaY2-$this->GraphAreaY1)/2;
+ $Bounds = $this->drawText($XPos,$YPos,$Parameters["Name"],array("Align"=>TEXT_ALIGN_BOTTOMMIDDLE,"Angle"=>270));
+ $MaxLeft = $Bounds[2]["X"];
+
+ $this->DataSet->Data["GraphArea"]["X2"] = $MaxLeft + $this->FontSize;
+ }
+ $AxisPos["R"] = $MaxLeft + $ScaleSpacing;
+ }
+ }
+ elseif ( $Pos == SCALE_POS_TOPBOTTOM )
+ {
+ if ( $Parameters["Position"] == AXIS_POSITION_TOP )
+ {
+ if ( $Floating )
+ { $FloatingOffset = $XMargin; $this->drawLine($this->GraphAreaX1+$Parameters["Margin"],$AxisPos["T"],$this->GraphAreaX2-$Parameters["Margin"],$AxisPos["T"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
+ else
+ { $FloatingOffset = 0; $this->drawLine($this->GraphAreaX1,$AxisPos["T"],$this->GraphAreaX2,$AxisPos["T"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
+
+ if ( $DrawArrows ) { $this->drawArrow($this->GraphAreaX2-$Parameters["Margin"],$AxisPos["T"],$this->GraphAreaX2+($ArrowSize*2),$AxisPos["T"],array("FillR"=>$AxisR,"FillG"=>$AxisG,"FillB"=>$AxisB,"Size"=>$ArrowSize)); }
+
+ $Width = ($this->GraphAreaX2 - $this->GraphAreaX1) - $Parameters["Margin"]*2;
+ $Step = $Width / $Parameters["Rows"]; $SubTicksSize = $Step /2; $MinTop = $AxisPos["T"];
+ $LastX = NULL;
+ for($i=0;$i<=$Parameters["Rows"];$i++)
+ {
+ $XPos = $this->GraphAreaX1 + $Parameters["Margin"] + $Step*$i;
+ $YPos = $AxisPos["T"];
+ $Value = $this->scaleFormat($Parameters["ScaleMin"] + $Parameters["RowHeight"]*$i,$Parameters["Display"],$Parameters["Format"],$Parameters["Unit"]);
+
+ if ( $i%2 == 1 ) { $BGColor = array("R"=>$BackgroundR1,"G"=>$BackgroundG1,"B"=>$BackgroundB1,"Alpha"=>$BackgroundAlpha1); } else { $BGColor = array("R"=>$BackgroundR2,"G"=>$BackgroundG2,"B"=>$BackgroundB2,"Alpha"=>$BackgroundAlpha2); }
+ if ( $LastX != NULL && $CycleBackground && ( $DrawYLines == ALL || in_array($AxisID,$DrawYLines) )) { $this->drawFilledRectangle($LastX,$this->GraphAreaY1+$FloatingOffset,$XPos,$this->GraphAreaY2-$FloatingOffset,$BGColor); }
+
+ if ( $DrawYLines == ALL || in_array($AxisID,$DrawYLines) ) { $this->drawLine($XPos,$this->GraphAreaY1+$FloatingOffset,$XPos,$this->GraphAreaY2-$FloatingOffset,array("R"=>$GridR,"G"=>$GridG,"B"=>$GridB,"Alpha"=>$GridAlpha,"Ticks"=>$GridTicks)); }
+
+ if ( $DrawSubTicks && $i != $Parameters["Rows"] )
+ $this->drawLine($XPos+$SubTicksSize,$YPos-$OuterSubTickWidth,$XPos+$SubTicksSize,$YPos+$InnerSubTickWidth,array("R"=>$SubTickR,"G"=>$SubTickG,"B"=>$SubTickB,"Alpha"=>$SubTickAlpha));
+
+ $this->drawLine($XPos,$YPos-$OuterTickWidth,$XPos,$YPos+$InnerTickWidth,array("R"=>$TickR,"G"=>$TickG,"B"=>$TickB,"Alpha"=>$TickAlpha));
+ $Bounds = $this->drawText($XPos,$YPos-$OuterTickWidth-2,$Value,array("Align"=>TEXT_ALIGN_BOTTOMMIDDLE));
+ $TxtHeight = $YPos-$OuterTickWidth-2-($Bounds[1]["Y"]-$Bounds[2]["Y"]);
+ $MinTop = min($MinTop,$TxtHeight);
+
+ $LastX = $XPos;
+ }
+
+ if ( isset($Parameters["Name"]) )
+ {
+ $YPos = $MinTop-2;
+ $XPos = $this->GraphAreaX1+($this->GraphAreaX2-$this->GraphAreaX1)/2;
+ $Bounds = $this->drawText($XPos,$YPos,$Parameters["Name"],array("Align"=>TEXT_ALIGN_BOTTOMMIDDLE));
+ $MinTop = $Bounds[2]["Y"];
+
+ $this->DataSet->Data["GraphArea"]["Y1"] = $MinTop;
+ }
+
+ $AxisPos["T"] = $MinTop - $ScaleSpacing;
+ }
+ elseif ( $Parameters["Position"] == AXIS_POSITION_BOTTOM )
+ {
+ if ( $Floating )
+ { $FloatingOffset = $XMargin; $this->drawLine($this->GraphAreaX1+$Parameters["Margin"],$AxisPos["B"],$this->GraphAreaX2-$Parameters["Margin"],$AxisPos["B"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
+ else
+ { $FloatingOffset = 0; $this->drawLine($this->GraphAreaX1,$AxisPos["B"],$this->GraphAreaX2,$AxisPos["B"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
+
+ if ( $DrawArrows ) { $this->drawArrow($this->GraphAreaX2-$Parameters["Margin"],$AxisPos["B"],$this->GraphAreaX2+($ArrowSize*2),$AxisPos["B"],array("FillR"=>$AxisR,"FillG"=>$AxisG,"FillB"=>$AxisB,"Size"=>$ArrowSize)); }
+
+ $Width = ($this->GraphAreaX2 - $this->GraphAreaX1) - $Parameters["Margin"]*2;
+ $Step = $Width / $Parameters["Rows"]; $SubTicksSize = $Step /2; $MaxBottom = $AxisPos["B"];
+ $LastX = NULL;
+ for($i=0;$i<=$Parameters["Rows"];$i++)
+ {
+ $XPos = $this->GraphAreaX1 + $Parameters["Margin"] + $Step*$i;
+ $YPos = $AxisPos["B"];
+ $Value = $this->scaleFormat($Parameters["ScaleMin"] + $Parameters["RowHeight"]*$i,$Parameters["Display"],$Parameters["Format"],$Parameters["Unit"]);
+
+ if ( $i%2 == 1 ) { $BGColor = array("R"=>$BackgroundR1,"G"=>$BackgroundG1,"B"=>$BackgroundB1,"Alpha"=>$BackgroundAlpha1); } else { $BGColor = array("R"=>$BackgroundR2,"G"=>$BackgroundG2,"B"=>$BackgroundB2,"Alpha"=>$BackgroundAlpha2); }
+ if ( $LastX != NULL && $CycleBackground && ( $DrawYLines == ALL || in_array($AxisID,$DrawYLines) )) { $this->drawFilledRectangle($LastX,$this->GraphAreaY1+$FloatingOffset,$XPos,$this->GraphAreaY2-$FloatingOffset,$BGColor); }
+
+ if ( $DrawYLines == ALL || in_array($AxisID,$DrawYLines) ) { $this->drawLine($XPos,$this->GraphAreaY1+$FloatingOffset,$XPos,$this->GraphAreaY2-$FloatingOffset,array("R"=>$GridR,"G"=>$GridG,"B"=>$GridB,"Alpha"=>$GridAlpha,"Ticks"=>$GridTicks)); }
+
+ if ( $DrawSubTicks && $i != $Parameters["Rows"] )
+ $this->drawLine($XPos+$SubTicksSize,$YPos-$OuterSubTickWidth,$XPos+$SubTicksSize,$YPos+$InnerSubTickWidth,array("R"=>$SubTickR,"G"=>$SubTickG,"B"=>$SubTickB,"Alpha"=>$SubTickAlpha));
+
+ $this->drawLine($XPos,$YPos-$OuterTickWidth,$XPos,$YPos+$InnerTickWidth,array("R"=>$TickR,"G"=>$TickG,"B"=>$TickB,"Alpha"=>$TickAlpha));
+ $Bounds = $this->drawText($XPos,$YPos+$OuterTickWidth+2,$Value,array("Align"=>TEXT_ALIGN_TOPMIDDLE));
+ $TxtHeight = $YPos+$OuterTickWidth+2+($Bounds[1]["Y"]-$Bounds[2]["Y"]);
+ $MaxBottom = max($MaxBottom,$TxtHeight);
+
+ $LastX = $XPos;
+ }
+
+ if ( isset($Parameters["Name"]) )
+ {
+ $YPos = $MaxBottom+2;
+ $XPos = $this->GraphAreaX1+($this->GraphAreaX2-$this->GraphAreaX1)/2;
+ $Bounds = $this->drawText($XPos,$YPos,$Parameters["Name"],array("Align"=>TEXT_ALIGN_TOPMIDDLE));
+ $MaxBottom = $Bounds[0]["Y"];
+
+ $this->DataSet->Data["GraphArea"]["Y2"] = $MaxBottom + $this->FontSize;
+ }
+
+ $AxisPos["B"] = $MaxBottom + $ScaleSpacing;
+ }
+ }
+ }
+ }
+ }
+
+ function isValidLabel($Value,$LastValue,$LabelingMethod,$ID,$LabelSkip)
+ {
+ if ( $LabelingMethod == LABELING_DIFFERENT && $Value != $LastValue ) { return(TRUE); }
+ if ( $LabelingMethod == LABELING_DIFFERENT && $Value == $LastValue ) { return(FALSE); }
+ if ( $LabelingMethod == LABELING_ALL && $LabelSkip == 0 ) { return(TRUE); }
+ if ( $LabelingMethod == LABELING_ALL && ($ID+$LabelSkip) % ($LabelSkip+1) != 1 ) { return(FALSE); }
+
+ return(TRUE);
+ }
+
+ /* Compute the scale, check for the best visual factors */
+ function computeScale($XMin,$XMax,$MaxDivs,$Factors,$AxisID=0)
+ {
+ /* Compute each factors */
+ $Results = "";
+ foreach ($Factors as $Key => $Factor)
+ $Results[$Factor] = $this->processScale($XMin,$XMax,$MaxDivs,array($Factor),$AxisID);
+
+ /* Remove scales that are creating to much decimals */
+ $GoodScaleFactors = "";
+ foreach ($Results as $Key => $Result)
+ {
+ $Decimals = preg_split("/\./",$Result["RowHeight"]);
+ if ( (!isset($Decimals[1])) || (strlen($Decimals[1]) < 6) ) { $GoodScaleFactors[] = $Key; }
+ }
+
+ /* Found no correct scale, shame,... returns the 1st one as default */
+ if ( $GoodScaleFactors == "" ) { return($Results[$Factors[0]]); }
+
+ /* Find the factor that cause the maximum number of Rows */
+ $MaxRows = 0; $BestFactor = 0;
+ foreach($GoodScaleFactors as $Key => $Factor)
+ { if ( $Results[$Factor]["Rows"] > $MaxRows ) { $MaxRows = $Results[$Factor]["Rows"]; $BestFactor = $Factor; } }
+
+ /* Return the best visual scale */
+ return($Results[$BestFactor]);
+ }
+
+ /* Compute the best matching scale based on size & factors */
+ function processScale($XMin,$XMax,$MaxDivs,$Factors,$AxisID)
+ {
+ $ScaleHeight = abs(ceil($XMax)-floor($XMin));
+
+ if ( isset($this->DataSet->Data["Axis"][$AxisID]["Format"]) )
+ $Format = $this->DataSet->Data["Axis"][$AxisID]["Format"];
+ else
+ $Format = NULL;
+
+ if ( isset($this->DataSet->Data["Axis"][$AxisID]["Display"]) )
+ $Mode = $this->DataSet->Data["Axis"][$AxisID]["Display"];
+ else
+ $Mode = AXIS_FORMAT_DEFAULT;
+
+ $Scale = "";
+ if ( $XMin != $XMax )
+ {
+ $Found = FALSE; $Rescaled = FALSE; $Scaled10Factor = .0001; $Result = 0;
+ while(!$Found)
+ {
+ foreach($Factors as $Key => $Factor)
+ {
+ if ( !$Found )
+ {
+ if ( !($this->modulo($XMin,$Factor*$Scaled10Factor) == 0) || ($XMin != floor($XMin))) { $XMinRescaled = floor($XMin/($Factor*$Scaled10Factor))*$Factor*$Scaled10Factor; } else { $XMinRescaled = $XMin; }
+ if ( !($this->modulo($XMax,$Factor*$Scaled10Factor) == 0) || ($XMax != floor($XMax))) { $XMaxRescaled = floor($XMax/($Factor*$Scaled10Factor))*$Factor*$Scaled10Factor+($Factor*$Scaled10Factor); } else { $XMaxRescaled = $XMax; }
+ $ScaleHeightRescaled = abs($XMaxRescaled-$XMinRescaled);
+
+ if ( !$Found && floor($ScaleHeightRescaled/($Factor*$Scaled10Factor)) <= $MaxDivs ) { $Found = TRUE; $Rescaled = TRUE; $Result = $Factor * $Scaled10Factor; }
+ }
+ }
+ $Scaled10Factor = $Scaled10Factor * 10;
+ }
+
+ /* ReCall Min / Max / Height */
+ if ( $Rescaled ) { $XMin = $XMinRescaled; $XMax = $XMaxRescaled; $ScaleHeight = $ScaleHeightRescaled; }
+
+ /* Compute rows size */
+ $Rows = floor($ScaleHeight / $Result); if ( $Rows == 0 ) { $Rows = 1; }
+ $RowHeight = $ScaleHeight / $Rows;
+
+ /* Return the results */
+ $Scale["Rows"] = $Rows; $Scale["RowHeight"] = $RowHeight; $Scale["XMin"] = $XMin; $Scale["XMax"] = $XMax;
+
+ /* Compute the needed decimals for the metric view to avoid repetition of the same X Axis labels */
+ if ( $Mode == AXIS_FORMAT_METRIC && $Format == NULL )
+ {
+ $Done = FALSE; $GoodDecimals = 0;
+ for($Decimals=0;$Decimals<=10;$Decimals++)
+ {
+ if ( !$Done )
+ {
+ $LastLabel = "zob"; $ScaleOK = TRUE;
+ for($i=0;$i<=$Rows;$i++)
+ {
+ $Value = $XMin + $i*$RowHeight;
+ $Label = $this->scaleFormat($Value,AXIS_FORMAT_METRIC,$Decimals);
+
+ if ( $LastLabel == $Label ) { $ScaleOK = FALSE; }
+ $LastLabel = $Label;
+ }
+ if ( $ScaleOK ) { $Done = TRUE; $GoodDecimals = $Decimals; }
+ }
+ }
+
+ $Scale["Format"] = $GoodDecimals;
+ }
+ }
+ else
+ {
+ /* If all values are the same we keep a +1/-1 scale */
+ $Rows = 2; $XMin = $XMax-1; $XMax = $XMax+1; $RowHeight = 1;
+
+ /* Return the results */
+ $Scale["Rows"] = $Rows; $Scale["RowHeight"] = $RowHeight; $Scale["XMin"] = $XMin; $Scale["XMax"] = $XMax;
+ }
+
+ return($Scale);
+ }
+
+ function modulo($Value1,$Value2)
+ {
+ if (floor($Value2) == 0) { return(0); }
+ if (floor($Value2) != 0) { return($Value1 % $Value2); }
+
+ $MinValue = min($Value1,$Value2); $Factor = 10;
+ while ( floor($MinValue*$Factor) == 0 )
+ { $Factor = $Factor * 10; }
+
+ return(($Value1*$Factor) % ($Value2*$Factor));
+ }
+
+ /* Draw a threshold with the computed scale */
+ function drawThreshold($Value,$Format="")
+ {
+ $AxisID = isset($Format["AxisID"]) ? $Format["AxisID"] : 0;
+ $R = isset($Format["R"]) ? $Format["R"] : 255;
+ $G = isset($Format["G"]) ? $Format["G"] : 0;
+ $B = isset($Format["B"]) ? $Format["B"] : 0;
+ $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 50;
+ $Weight = isset($Format["Weight"]) ? $Format["Weight"] : NULL;
+ $Ticks = isset($Format["Ticks"]) ? $Format["Ticks"] : 6;
+ $Wide = isset($Format["Wide"]) ? $Format["Wide"] : FALSE;
+ $WideFactor = isset($Format["WideFactor"]) ? $Format["WideFactor"] : 5;
+ $WriteCaption = isset($Format["WriteCaption"]) ? $Format["WriteCaption"] : FALSE;
+ $Caption = isset($Format["Caption"]) ? $Format["Caption"] : NULL;
+ $CaptionAlign = isset($Format["CaptionAlign"]) ? $Format["CaptionAlign"] : CAPTION_LEFT_TOP;
+ $CaptionOffset = isset($Format["CaptionOffset"]) ? $Format["CaptionOffset"] : 10;
+ $CaptionR = isset($Format["CaptionR"]) ? $Format["CaptionR"] : 255;
+ $CaptionG = isset($Format["CaptionG"]) ? $Format["CaptionG"] : 255;
+ $CaptionB = isset($Format["CaptionB"]) ? $Format["CaptionB"] : 255;
+ $CaptionAlpha = isset($Format["CaptionAlpha"]) ? $Format["CaptionAlpha"] : 100;
+ $DrawBox = isset($Format["DrawBox"]) ? $Format["DrawBox"] : TRUE;
+ $DrawBoxBorder = isset($Format["DrawBoxBorder"]) ? $Format["DrawBoxBorder"] : FALSE;
+ $BorderOffset = isset($Format["BorderOffset"]) ? $Format["BorderOffset"] : 3;
+ $BoxRounded = isset($Format["BoxRounded"]) ? $Format["BoxRounded"] : TRUE;
+ $RoundedRadius = isset($Format["RoundedRadius"]) ? $Format["RoundedRadius"] : 3;
+ $BoxR = isset($Format["BoxR"]) ? $Format["BoxR"] : 0;
+ $BoxG = isset($Format["BoxG"]) ? $Format["BoxG"] : 0;
+ $BoxB = isset($Format["BoxB"]) ? $Format["BoxB"] : 0;
+ $BoxAlpha = isset($Format["BoxAlpha"]) ? $Format["BoxAlpha"] : 30;
+ $BoxSurrounding = isset($Format["BoxSurrounding"]) ? $Format["BoxSurrounding"] : "";
+ $BoxBorderR = isset($Format["BoxBorderR"]) ? $Format["BoxBorderR"] : 255;
+ $BoxBorderG = isset($Format["BoxBorderG"]) ? $Format["BoxBorderG"] : 255;
+ $BoxBorderB = isset($Format["BoxBorderB"]) ? $Format["BoxBorderB"] : 255;
+ $BoxBorderAlpha = isset($Format["BoxBorderAlpha"]) ? $Format["BoxBorderAlpha"] : 100;
+
+ $CaptionSettings = array("DrawBox"=>$DrawBox,"DrawBoxBorder"=>$DrawBoxBorder,"BorderOffset"=>$BorderOffset,"BoxRounded"=>$BoxRounded,"RoundedRadius"=>$RoundedRadius,
+ "BoxR"=>$BoxR,"BoxG"=>$BoxG,"BoxB"=>$BoxB,"BoxAlpha"=>$BoxAlpha,"BoxSurrounding"=>$BoxSurrounding,
+ "BoxBorderR"=>$BoxBorderR,"BoxBorderG"=>$BoxBorderG,"BoxBorderB"=>$BoxBorderB,"BoxBorderAlpha"=>$BoxBorderAlpha,
+ "R"=>$CaptionR,"G"=>$CaptionG,"B"=>$CaptionB,"Alpha"=>$CaptionAlpha);
+
+ if ( $Caption == NULL ) { $Caption = $Value; }
+
+ $Data = $this->DataSet->getData();
+ if ( !isset($Data["Axis"][$AxisID]) ) { return(-1); }
+
+ if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
+ {
+ $YPos = $this->scaleComputeY($Value,array("AxisID"=>$AxisID));
+ if ( $YPos >= $this->GraphAreaY1 && $YPos <= $this->GraphAreaY2 )
+ {
+ $this->drawLine($this->GraphAreaX1,$YPos,$this->GraphAreaX2,$YPos,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight));
+
+ if ( $Wide )
+ {
+ $this->drawLine($this->GraphAreaX1,$YPos-1,$this->GraphAreaX2,$YPos-1,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha/$WideFactor,"Ticks"=>$Ticks));
+ $this->drawLine($this->GraphAreaX1,$YPos+1,$this->GraphAreaX2,$YPos+1,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha/$WideFactor,"Ticks"=>$Ticks));
+ }
+
+ if ( $WriteCaption )
+ {
+ if ( $CaptionAlign == CAPTION_LEFT_TOP )
+ { $X = $this->GraphAreaX1 + $CaptionOffset; $CaptionSettings["Align"] = TEXT_ALIGN_MIDDLELEFT; }
+ else
+ { $X = $this->GraphAreaX2 - $CaptionOffset; $CaptionSettings["Align"] = TEXT_ALIGN_MIDDLERIGHT; }
+
+ $this->drawText($X,$YPos,$Caption,$CaptionSettings);
+ }
+ }
+
+ return(array("Y"=>$YPos));
+ }
+
+ if ( $Data["Orientation"] == SCALE_POS_TOPBOTTOM )
+ {
+ $XPos = $this->scaleComputeY($Value,array("AxisID"=>$AxisID));
+ if ( $XPos >= $this->GraphAreaX1 && $XPos <= $this->GraphAreaX2 )
+ {
+ $this->drawLine($XPos,$this->GraphAreaY1,$XPos,$this->GraphAreaY2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight));
+
+ if ( $Wide )
+ {
+ $this->drawLine($XPos-1,$this->GraphAreaY1,$XPos-1,$this->GraphAreaY2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha/$WideFactor,"Ticks"=>$Ticks));
+ $this->drawLine($XPos+1,$this->GraphAreaY1,$XPos+1,$this->GraphAreaY2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha/$WideFactor,"Ticks"=>$Ticks));
+ }
+
+ if ( $WriteCaption )
+ {
+ if ( $CaptionAlign == CAPTION_LEFT_TOP )
+ { $Y = $this->GraphAreaY1 + $CaptionOffset; $CaptionSettings["Align"] = TEXT_ALIGN_TOPMIDDLE; }
+ else
+ { $Y = $this->GraphAreaY2 - $CaptionOffset; $CaptionSettings["Align"] = TEXT_ALIGN_BOTTOMMIDDLE; }
+
+ $CaptionSettings["Align"] = TEXT_ALIGN_TOPMIDDLE;
+ $this->drawText($XPos,$Y,$Caption,$CaptionSettings);
+ }
+ }
+
+ return(array("Y"=>$XPos));
+ }
+ }
+
+ /* Draw a threshold with the computed scale */
+ function drawThresholdArea($Value1,$Value2,$Format="")
+ {
+ $AxisID = isset($Format["AxisID"]) ? $Format["AxisID"] : 0;
+ $R = isset($Format["R"]) ? $Format["R"] : 255;
+ $G = isset($Format["G"]) ? $Format["G"] : 0;
+ $B = isset($Format["B"]) ? $Format["B"] : 0;
+ $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 20;
+ $Border = isset($Format["Border"]) ? $Format["Border"] : TRUE;
+ $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : $R;
+ $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : $G;
+ $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : $B;
+ $BorderAlpha = isset($Format["BorderAlpha"]) ? $Format["BorderAlpha"] : $Alpha + 20;
+ $BorderTicks = isset($Format["BorderTicks"]) ? $Format["BorderTicks"] : 2;
+
+ if ($BorderAlpha >100) { $BorderAlpha = 100;}
+
+ $Data = $this->DataSet->getData();
+ if ( !isset($Data["Axis"][$AxisID]) ) { return(-1); }
+
+ if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
+ {
+ $YPos1 = $this->scaleComputeY($Value1,array("AxisID"=>$AxisID));
+ $YPos2 = $this->scaleComputeY($Value2,array("AxisID"=>$AxisID));
+
+ if ( $YPos1 > $this->GraphAreaY2 ) { $YPos1 = $this->GraphAreaY2; } if ( $YPos1 < $this->GraphAreaY1 ) { $YPos1 = $this->GraphAreaY1; }
+ if ( $YPos2 > $this->GraphAreaY2 ) { $YPos2 = $this->GraphAreaY2; } if ( $YPos2 < $this->GraphAreaY1 ) { $YPos2 = $this->GraphAreaY1; }
+
+ $this->drawFilledRectangle($this->GraphAreaX1+1,$YPos1,$this->GraphAreaX2-1,$YPos2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
+ if ( $Border )
+ {
+ $this->drawLine($this->GraphAreaX1+1,$YPos1,$this->GraphAreaX2-1,$YPos1,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha,"Ticks"=>$BorderTicks));
+ $this->drawLine($this->GraphAreaX1+1,$YPos2,$this->GraphAreaX2-1,$YPos2,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha,"Ticks"=>$BorderTicks));
+ }
+ return(array("Y1"=>$YPos1,"Y2"=>$YPos2));
+ }
+
+ if ( $Data["Orientation"] == SCALE_POS_TOPBOTTOM )
+ {
+ $XPos1 = $this->scaleComputeY($Value1,array("AxisID"=>$AxisID));
+ $XPos2 = $this->scaleComputeY($Value2,array("AxisID"=>$AxisID));
+
+ if ( $XPos1 > $this->GraphAreaX2 ) { $XPos1 = $this->GraphAreaX2; } if ( $XPos1 < $this->GraphAreaX1 ) { $XPos1 = $this->GraphAreaX1; }
+ if ( $XPos2 > $this->GraphAreaX2 ) { $XPos2 = $this->GraphAreaX2; } if ( $XPos2 < $this->GraphAreaX1 ) { $XPos2 = $this->GraphAreaX1; }
+
+ $this->drawFilledRectangle($XPos1,$this->GraphAreaY1+1,$XPos2,$this->GraphAreaY2-1,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
+ if ( $Border )
+ {
+ $this->drawLine($XPos1,$this->GraphAreaY1+1,$XPos1,$this->GraphAreaY2-1,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha,"Ticks"=>$BorderTicks));
+ $this->drawLine($XPos2,$this->GraphAreaY1+1,$XPos2,$this->GraphAreaY2-1,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha,"Ticks"=>$BorderTicks));
+ }
+ return(array("Y1"=>$XPos1,"Y2"=>$XPos2));
+ }
+ }
+
+ function scaleGetXSettings()
+ {
+ $Data = $this->DataSet->getData();
+ foreach($Data["Axis"] as $AxisID => $Settings)
+ {
+ if ( $Settings["Identity"] == AXIS_X )
+ {
+ $Rows = $Settings["Rows"];
+
+ return(array($Settings["Margin"],$Rows));
+ }
+ }
+ }
+
+ function scaleComputeY($Values,$Option="",$ReturnOnly0Height=FALSE)
+ {
+ $AxisID = isset($Option["AxisID"]) ? $Option["AxisID"] : 0;
+ $SerieName = isset($Option["SerieName"]) ? $Option["SerieName"] : NULL;
+
+ $Data = $this->DataSet->getData();
+ if ( !isset($Data["Axis"][$AxisID]) ) { return(-1); }
+
+ if ( $SerieName != NULL ) { $AxisID = $Data["Series"][$SerieName]["Axis"]; }
+ if ( !is_array($Values) ) { $tmp = $Values; $Values = ""; $Values[0] = $tmp; }
+
+ $Result = "";
+ if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
+ {
+ $Height = ($this->GraphAreaY2 - $this->GraphAreaY1) - $Data["Axis"][$AxisID]["Margin"]*2;
+ $ScaleHeight = $Data["Axis"][$AxisID]["ScaleMax"] - $Data["Axis"][$AxisID]["ScaleMin"];
+ $Step = $Height / $ScaleHeight;
+
+ if ( $ReturnOnly0Height )
+ { foreach($Values as $Key => $Value) { if ( $Value == VOID ) { $Result[] = VOID; } else { $Result[] = $Step * $Value; } } }
+ else
+ { foreach($Values as $Key => $Value) { if ( $Value == VOID ) { $Result[] = VOID; } else { $Result[] = $this->GraphAreaY2 - $Data["Axis"][$AxisID]["Margin"] - ($Step * ($Value-$Data["Axis"][$AxisID]["ScaleMin"])); } } }
+ }
+ else
+ {
+ $Width = ($this->GraphAreaX2 - $this->GraphAreaX1) - $Data["Axis"][$AxisID]["Margin"]*2;
+ $ScaleWidth = $Data["Axis"][$AxisID]["ScaleMax"] - $Data["Axis"][$AxisID]["ScaleMin"];
+ $Step = $Width / $ScaleWidth;
+
+ if ( $ReturnOnly0Height )
+ { foreach($Values as $Key => $Value) { if ( $Value == VOID ) { $Result[] = VOID; } else { $Result[] = $Step * $Value; } } }
+ else
+ { foreach($Values as $Key => $Value) { if ( $Value == VOID ) { $Result[] = VOID; } else { $Result[] = $this->GraphAreaX1 + $Data["Axis"][$AxisID]["Margin"] + ($Step * ($Value-$Data["Axis"][$AxisID]["ScaleMin"])); } } }
+ }
+
+ if ( count($Result) == 1 )
+ return($Result[0]);
+ else
+ return($Result);
+ }
+
+ /* Format the axis values */
+ function scaleFormat($Value,$Mode=NULL,$Format=NULL,$Unit=NULL)
+ {
+ if ( $Value == VOID ) { return(""); }
+
+ if ( $Mode == AXIS_FORMAT_DATE )
+ { if ( $Format == NULL ) { $Pattern = "d/m/Y"; } else { $Pattern = $Format; } return(date($Pattern,$Value)); }
+
+ if ( $Mode == AXIS_FORMAT_TIME )
+ { if ( $Format == NULL ) { $Pattern = "H:i:s"; } else { $Pattern = $Format; } return(date($Pattern,$Value)); }
+
+ if ( $Mode == AXIS_FORMAT_CURRENCY )
+ { return($Format.number_format($Value,2)); }
+
+ if ( $Mode == AXIS_FORMAT_METRIC )
+ {
+ if (abs($Value) > 1000000000)
+ return(round($Value/1000000000,$Format)."g".$Unit);
+ if (abs($Value) > 1000000)
+ return(round($Value/1000000,$Format)."m".$Unit);
+ elseif (abs($Value) >= 1000)
+ return(round($Value/1000,$Format)."k".$Unit);
+
+ }
+ return($Value.$Unit);
+ }
+
+ /* Write Max value on a chart */
+ function writeBounds($Type=BOUND_BOTH,$Format=NULL)
+ {
+ $MaxLabelTxt = isset($Format["MaxLabelTxt"]) ? $Format["MaxLabelTxt"] : "max=";
+ $MinLabelTxt = isset($Format["MinLabelTxt"]) ? $Format["MinLabelTxt"] : "min=";
+ $Decimals = isset($Format["Decimals"]) ? $Format["Decimals"] : 1;
+ $ExcludedSeries = isset($Format["ExcludedSeries"]) ? $Format["ExcludedSeries"] : "";
+ $DisplayOffset = isset($Format["DisplayOffset"]) ? $Format["DisplayOffset"] : 4;
+ $DisplayColor = isset($Format["DisplayColor"]) ? $Format["DisplayColor"] : DISPLAY_MANUAL;
+ $MaxDisplayR = isset($Format["MaxDisplayR"]) ? $Format["MaxDisplayR"] : 0;
+ $MaxDisplayG = isset($Format["MaxDisplayG"]) ? $Format["MaxDisplayG"] : 0;
+ $MaxDisplayB = isset($Format["MaxDisplayB"]) ? $Format["MaxDisplayB"] : 0;
+ $MinDisplayR = isset($Format["MinDisplayR"]) ? $Format["MinDisplayR"] : 255;
+ $MinDisplayG = isset($Format["MinDisplayG"]) ? $Format["MinDisplayG"] : 255;
+ $MinDisplayB = isset($Format["MinDisplayB"]) ? $Format["MinDisplayB"] : 255;
+ $MinLabelPos = isset($Format["MinLabelPos"]) ? $Format["MinLabelPos"] : BOUND_LABEL_POS_AUTO;
+ $MaxLabelPos = isset($Format["MaxLabelPos"]) ? $Format["MaxLabelPos"] : BOUND_LABEL_POS_AUTO;
+ $DrawBox = isset($Format["DrawBox"]) ? $Format["DrawBox"] : TRUE;
+ $DrawBoxBorder = isset($Format["DrawBoxBorder"]) ? $Format["DrawBoxBorder"] : FALSE;
+ $BorderOffset = isset($Format["BorderOffset"]) ? $Format["BorderOffset"] : 3;
+ $BoxRounded = isset($Format["BoxRounded"]) ? $Format["BoxRounded"] : TRUE;
+ $RoundedRadius = isset($Format["RoundedRadius"]) ? $Format["RoundedRadius"] : 3;
+ $BoxR = isset($Format["BoxR"]) ? $Format["BoxR"] : 0;
+ $BoxG = isset($Format["BoxG"]) ? $Format["BoxG"] : 0;
+ $BoxB = isset($Format["BoxB"]) ? $Format["BoxB"] : 0;
+ $BoxAlpha = isset($Format["BoxAlpha"]) ? $Format["BoxAlpha"] : 20;
+ $BoxSurrounding = isset($Format["BoxSurrounding"]) ? $Format["BoxSurrounding"] : "";
+ $BoxBorderR = isset($Format["BoxBorderR"]) ? $Format["BoxBorderR"] : 255;
+ $BoxBorderG = isset($Format["BoxBorderG"]) ? $Format["BoxBorderG"] : 255;
+ $BoxBorderB = isset($Format["BoxBorderB"]) ? $Format["BoxBorderB"] : 255;
+ $BoxBorderAlpha = isset($Format["BoxBorderAlpha"]) ? $Format["BoxBorderAlpha"] : 100;
+
+ $CaptionSettings = array("DrawBox"=>$DrawBox,"DrawBoxBorder"=>$DrawBoxBorder,"BorderOffset"=>$BorderOffset,"BoxRounded"=>$BoxRounded,"RoundedRadius"=>$RoundedRadius,
+ "BoxR"=>$BoxR,"BoxG"=>$BoxG,"BoxB"=>$BoxB,"BoxAlpha"=>$BoxAlpha,"BoxSurrounding"=>$BoxSurrounding,
+ "BoxBorderR"=>$BoxBorderR,"BoxBorderG"=>$BoxBorderG,"BoxBorderB"=>$BoxBorderB,"BoxBorderAlpha"=>$BoxBorderAlpha);
+
+ list($XMargin,$XDivs) = $this->scaleGetXSettings();
+
+ $Data = $this->DataSet->getData();
+ foreach($Data["Series"] as $SerieName => $Serie)
+ {
+ if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] && !isset($ExcludedSeries[$SerieName]))
+ {
+ $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; $Alpha = $Serie["Color"]["Alpha"]; $Ticks = $Serie["Ticks"];
+ if ( $DisplayColor == DISPLAY_AUTO ) { $DisplayR = $R; $DisplayG = $G; $DisplayB = $B; }
+
+ $MinValue = $this->DataSet->getMin($SerieName);
+ $MaxValue = $this->DataSet->getMax($SerieName);
+
+ $MinPos = VOID; $MaxPos = VOID;
+ foreach($Serie["Data"] as $Key => $Value)
+ {
+ if ( $Value == $MinValue && $MinPos == VOID ) { $MinPos = $Key; }
+ if ( $Value == $MaxValue ) { $MaxPos = $Key; }
+ }
+
+ $AxisID = $Serie["Axis"];
+ $Mode = $Data["Axis"][$AxisID]["Display"];
+ $Format = $Data["Axis"][$AxisID]["Format"];
+ $Unit = $Data["Axis"][$AxisID]["Unit"];
+
+ $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"]));
+
+ if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
+ {
+ $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs;
+ $X = $this->GraphAreaX1 + $XMargin;
+ $SerieOffset = isset($Serie["XOffset"]) ? $Serie["XOffset"] : 0;
+
+ if ( $Type == BOUND_MAX || $Type == BOUND_BOTH )
+ {
+ if ( $MaxLabelPos == BOUND_LABEL_POS_TOP || ( $MaxLabelPos == BOUND_LABEL_POS_AUTO && $MaxValue >= 0) ) { $YPos = $PosArray[$MaxPos] - $DisplayOffset + 2; $Align = TEXT_ALIGN_BOTTOMMIDDLE; }
+ if ( $MaxLabelPos == BOUND_LABEL_POS_BOTTOM || ( $MaxLabelPos == BOUND_LABEL_POS_AUTO && $MaxValue < 0) ) { $YPos = $PosArray[$MaxPos] + $DisplayOffset + 2; $Align = TEXT_ALIGN_TOPMIDDLE; }
+
+ $XPos = $X + $MaxPos*$XStep + $SerieOffset;
+ $Label = $MaxLabelTxt.$this->scaleFormat(round($MaxValue,$Decimals),$Mode,$Format,$Unit);
+
+ $TxtPos = $this->getTextBox($XPos,$YPos,$this->FontName,$this->FontSize,0,$Label);
+ $XOffset = 0; $YOffset = 0;
+ if ( $TxtPos[0]["X"] < $this->GraphAreaX1 ) { $XOffset = (($this->GraphAreaX1 - $TxtPos[0]["X"])/2); }
+ if ( $TxtPos[1]["X"] > $this->GraphAreaX2 ) { $XOffset = -(($TxtPos[1]["X"] - $this->GraphAreaX2)/2); }
+ if ( $TxtPos[2]["Y"] < $this->GraphAreaY1 ) { $YOffset = $this->GraphAreaY1 - $TxtPos[2]["Y"]; }
+ if ( $TxtPos[0]["Y"] > $this->GraphAreaY2 ) { $YOffset = -($TxtPos[0]["Y"] - $this->GraphAreaY2); }
+
+ $CaptionSettings["R"] = $MaxDisplayR; $CaptionSettings["G"] = $MaxDisplayG;
+ $CaptionSettings["B"] = $MaxDisplayB; $CaptionSettings["Align"] = $Align;
+
+ $this->drawText($XPos+$XOffset,$YPos+$YOffset,$Label,$CaptionSettings);
+ }
+
+ if ( $Type == BOUND_MIN || $Type == BOUND_BOTH )
+ {
+ if ( $MinLabelPos == BOUND_LABEL_POS_TOP || ( $MinLabelPos == BOUND_LABEL_POS_AUTO && $MinValue >= 0) ) { $YPos = $PosArray[$MinPos] - $DisplayOffset + 2; $Align = TEXT_ALIGN_BOTTOMMIDDLE; }
+ if ( $MinLabelPos == BOUND_LABEL_POS_BOTTOM || ( $MinLabelPos == BOUND_LABEL_POS_AUTO && $MinValue < 0) ) { $YPos = $PosArray[$MinPos] + $DisplayOffset + 2; $Align = TEXT_ALIGN_TOPMIDDLE; }
+
+ $XPos = $X + $MinPos*$XStep + $SerieOffset;
+ $Label = $MinLabelTxt.$this->scaleFormat(round($MinValue,$Decimals),$Mode,$Format,$Unit);
+
+ $TxtPos = $this->getTextBox($XPos,$YPos,$this->FontName,$this->FontSize,0,$Label);
+ $XOffset = 0; $YOffset = 0;
+ if ( $TxtPos[0]["X"] < $this->GraphAreaX1 ) { $XOffset = (($this->GraphAreaX1 - $TxtPos[0]["X"])/2); }
+ if ( $TxtPos[1]["X"] > $this->GraphAreaX2 ) { $XOffset = -(($TxtPos[1]["X"] - $this->GraphAreaX2)/2); }
+ if ( $TxtPos[2]["Y"] < $this->GraphAreaY1 ) { $YOffset = $this->GraphAreaY1 - $TxtPos[2]["Y"]; }
+ if ( $TxtPos[0]["Y"] > $this->GraphAreaY2 ) { $YOffset = -($TxtPos[0]["Y"] - $this->GraphAreaY2); }
+
+ $CaptionSettings["R"] = $MinDisplayR; $CaptionSettings["G"] = $MinDisplayG;
+ $CaptionSettings["B"] = $MinDisplayB; $CaptionSettings["Align"] = $Align;
+
+ $this->drawText($XPos+$XOffset,$YPos-$DisplayOffset+$YOffset,$Label,$CaptionSettings);
+ }
+ }
+ else
+ {
+ $XStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs;
+ $X = $this->GraphAreaY1 + $XMargin;
+ $SerieOffset = isset($Serie["XOffset"]) ? $Serie["XOffset"] : 0;
+
+ if ( $Type == BOUND_MAX || $Type == BOUND_BOTH )
+ {
+ if ( $MaxLabelPos == BOUND_LABEL_POS_TOP || ( $MaxLabelPos == BOUND_LABEL_POS_AUTO && $MaxValue >= 0) ) { $YPos = $PosArray[$MaxPos] + $DisplayOffset + 2; $Align = TEXT_ALIGN_MIDDLELEFT; }
+ if ( $MaxLabelPos == BOUND_LABEL_POS_BOTTOM || ( $MaxLabelPos == BOUND_LABEL_POS_AUTO && $MaxValue < 0) ) { $YPos = $PosArray[$MaxPos] - $DisplayOffset + 2; $Align = TEXT_ALIGN_MIDDLERIGHT; }
+
+ $XPos = $X + $MaxPos*$XStep + $SerieOffset;
+ $Label = $MaxLabelTxt.$this->scaleFormat($MaxValue,$Mode,$Format,$Unit);
+
+ $TxtPos = $this->getTextBox($YPos,$XPos,$this->FontName,$this->FontSize,0,$Label);
+ $XOffset = 0; $YOffset = 0;
+ if ( $TxtPos[0]["X"] < $this->GraphAreaX1 ) { $XOffset = $this->GraphAreaX1 - $TxtPos[0]["X"]; }
+ if ( $TxtPos[1]["X"] > $this->GraphAreaX2 ) { $XOffset = -($TxtPos[1]["X"] - $this->GraphAreaX2); }
+ if ( $TxtPos[2]["Y"] < $this->GraphAreaY1 ) { $YOffset = ($this->GraphAreaY1 - $TxtPos[2]["Y"])/2; }
+ if ( $TxtPos[0]["Y"] > $this->GraphAreaY2 ) { $YOffset = -(($TxtPos[0]["Y"] - $this->GraphAreaY2)/2);}
+
+ $CaptionSettings["R"] = $MaxDisplayR; $CaptionSettings["G"] = $MaxDisplayG;
+ $CaptionSettings["B"] = $MaxDisplayB; $CaptionSettings["Align"] = $Align;
+
+ $this->drawText($YPos+$XOffset,$XPos+$YOffset,$Label,$CaptionSettings);
+ }
+
+ if ( $Type == BOUND_MIN || $Type == BOUND_BOTH )
+ {
+ if ( $MinLabelPos == BOUND_LABEL_POS_TOP || ( $MinLabelPos == BOUND_LABEL_POS_AUTO && $MinValue >= 0) ) { $YPos = $PosArray[$MinPos] + $DisplayOffset + 2; $Align = TEXT_ALIGN_MIDDLELEFT; }
+ if ( $MinLabelPos == BOUND_LABEL_POS_BOTTOM || ( $MinLabelPos == BOUND_LABEL_POS_AUTO && $MinValue < 0) ) { $YPos = $PosArray[$MinPos] - $DisplayOffset + 2; $Align = TEXT_ALIGN_MIDDLERIGHT; }
+
+ $XPos = $X + $MinPos*$XStep + $SerieOffset;
+ $Label = $MinLabelTxt.$this->scaleFormat($MinValue,$Mode,$Format,$Unit);
+
+ $TxtPos = $this->getTextBox($YPos,$XPos,$this->FontName,$this->FontSize,0,$Label);
+ $XOffset = 0; $YOffset = 0;
+ if ( $TxtPos[0]["X"] < $this->GraphAreaX1 ) { $XOffset = $this->GraphAreaX1 - $TxtPos[0]["X"]; }
+ if ( $TxtPos[1]["X"] > $this->GraphAreaX2 ) { $XOffset = -($TxtPos[1]["X"] - $this->GraphAreaX2); }
+ if ( $TxtPos[2]["Y"] < $this->GraphAreaY1 ) { $YOffset = ($this->GraphAreaY1 - $TxtPos[2]["Y"])/2; }
+ if ( $TxtPos[0]["Y"] > $this->GraphAreaY2 ) { $YOffset = -(($TxtPos[0]["Y"] - $this->GraphAreaY2)/2);}
+
+ $CaptionSettings["R"] = $MinDisplayR; $CaptionSettings["G"] = $MinDisplayG;
+ $CaptionSettings["B"] = $MinDisplayB; $CaptionSettings["Align"] = $Align;
+
+ $this->drawText($YPos+$XOffset,$XPos+$YOffset,$Label,$CaptionSettings);
+ }
+ }
+ }
+ }
+ }
+
+ /* Draw a plot chart */
+ function drawPlotChart($Format=NULL)
+ {
+ $PlotSize = isset($Format["PlotSize"]) ? $Format["PlotSize"] : 3;
+ $PlotBorder = isset($Format["PlotBorder"]) ? $Format["PlotBorder"] : FALSE;
+ $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : 50;
+ $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : 50;
+ $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : 50;
+ $BorderAlpha = isset($Format["BorderAlpha"]) ? $Format["BorderAlpha"] : 30;
+ $BorderSize = isset($Format["BorderSize"]) ? $Format["BorderSize"] : 2;
+ $Surrounding = isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL;
+ $DisplayValues = isset($Format["DisplayValues"]) ? $Format["DisplayValues"] : FALSE;
+ $DisplayOffset = isset($Format["DisplayOffset"]) ? $Format["DisplayOffset"] : 4;
+ $DisplayColor = isset($Format["DisplayColor"]) ? $Format["DisplayColor"] : DISPLAY_MANUAL;
+ $DisplayR = isset($Format["DisplayR"]) ? $Format["DisplayR"] : 0;
+ $DisplayG = isset($Format["DisplayG"]) ? $Format["DisplayG"] : 0;
+ $DisplayB = isset($Format["DisplayB"]) ? $Format["DisplayB"] : 0;
+ $RecordImageMap = isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE;
+
+ $Data = $this->DataSet->getData();
+ list($XMargin,$XDivs) = $this->scaleGetXSettings();
+
+ foreach($Data["Series"] as $SerieName => $Serie)
+ {
+ if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
+ {
+ $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; $Alpha = $Serie["Color"]["Alpha"]; $Ticks = $Serie["Ticks"];
+ if ( $Surrounding != NULL ) { $BorderR = $R + $Surrounding; $BorderG = $G + $Surrounding; $BorderB = $B + $Surrounding; }
+ if ( isset($Serie["Picture"]) )
+ { $Picture = $Serie["Picture"]; list($PicWidth,$PicHeight,$PicType) = $this->getPicInfo($Picture); }
+ else { $Picture = NULL; $PicOffset = 0; }
+
+ if ( $DisplayColor == DISPLAY_AUTO ) { $DisplayR = $R; $DisplayG = $G; $DisplayB = $B; }
+
+ $AxisID = $Serie["Axis"];
+ $Shape = $Serie["Shape"];
+ $Mode = $Data["Axis"][$AxisID]["Display"];
+ $Format = $Data["Axis"][$AxisID]["Format"];
+ $Unit = $Data["Axis"][$AxisID]["Unit"];
+
+ if (isset($Serie["Description"])) { $SerieDescription = $Serie["Description"]; } else { $SerieDescription = $SerieName; }
+
+ $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"]));
+
+ $this->DataSet->Data["Series"][$SerieName]["XOffset"] = 0;
+
+ if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
+ {
+ if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; }
+ if ( $Picture != NULL ) { $PicOffset = $PicHeight / 2; $PlotSize = 0; }
+ $X = $this->GraphAreaX1 + $XMargin;
+
+ if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
+ foreach($PosArray as $Key => $Y)
+ {
+ if ( $DisplayValues )
+ $this->drawText($X,$Y-$DisplayOffset-$PlotSize-$BorderSize-$PicOffset,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>TEXT_ALIGN_BOTTOMMIDDLE));
+
+ if ( $Y != VOID )
+ {
+ if ( $RecordImageMap ) { $this->addToImageMap("CIRCLE",floor($X).",".floor($Y).",".$PlotSize,$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
+
+ if ( $Picture != NULL )
+ { $this->drawFromPicture($PicType,$Picture,$X-$PicWidth/2,$Y-$PicHeight/2); }
+ else
+ { $this->drawShape($X,$Y,$Shape,$PlotSize,$PlotBorder,$BorderSize,$R,$G,$B,$Alpha,$BorderR,$BorderG,$BorderB,$BorderAlpha); }
+ }
+ $X = $X + $XStep;
+ }
+ }
+ else
+ {
+ if ( $XDivs == 0 ) { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; }
+ if ( $Picture != NULL ) { $PicOffset = $PicWidth / 2; $PlotSize = 0; }
+ $Y = $this->GraphAreaY1 + $XMargin;
+
+ if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
+ foreach($PosArray as $Key => $X)
+ {
+ if ( $DisplayValues )
+ $this->drawText($X+$DisplayOffset+$PlotSize+$BorderSize+$PicOffset,$Y,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("Angle"=>270,"R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>TEXT_ALIGN_BOTTOMMIDDLE));
+
+ if ( $X != VOID )
+ {
+ if ( $RecordImageMap ) { $this->addToImageMap("CIRCLE",floor($X).",".floor($Y).",".$PlotSize,$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
+
+ if ( $Picture != NULL )
+ { $this->drawFromPicture($PicType,$Picture,$X-$PicWidth/2,$Y-$PicHeight/2); }
+ else
+ { $this->drawShape($X,$Y,$Shape,$PlotSize,$PlotBorder,$BorderSize,$R,$G,$B,$Alpha,$BorderR,$BorderG,$BorderB,$BorderAlpha); }
+ }
+ $Y = $Y + $YStep;
+ }
+ }
+ }
+ }
+ }
+
+ /* Draw a spline chart */
+ function drawSplineChart($Format=NULL)
+ {
+ $BreakVoid = isset($Format["BreakVoid"]) ? $Format["BreakVoid"] : TRUE;
+ $VoidTicks = isset($Format["VoidTicks"]) ? $Format["VoidTicks"] : 4;
+ $BreakR = isset($Format["BreakR"]) ? $Format["BreakR"] : NULL; // 234
+ $BreakG = isset($Format["BreakG"]) ? $Format["BreakG"] : NULL; // 55
+ $BreakB = isset($Format["BreakB"]) ? $Format["BreakB"] : NULL; // 26
+ $DisplayValues = isset($Format["DisplayValues"]) ? $Format["DisplayValues"] : FALSE;
+ $DisplayOffset = isset($Format["DisplayOffset"]) ? $Format["DisplayOffset"] : 2;
+ $DisplayColor = isset($Format["DisplayColor"]) ? $Format["DisplayColor"] : DISPLAY_MANUAL;
+ $DisplayR = isset($Format["DisplayR"]) ? $Format["DisplayR"] : 0;
+ $DisplayG = isset($Format["DisplayG"]) ? $Format["DisplayG"] : 0;
+ $DisplayB = isset($Format["DisplayB"]) ? $Format["DisplayB"] : 0;
+ $RecordImageMap = isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE;
+ $ImageMapPlotSize = isset($Format["ImageMapPlotSize"]) ? $Format["ImageMapPlotSize"] : 5;
+
+ $Data = $this->DataSet->getData();
+ list($XMargin,$XDivs) = $this->scaleGetXSettings();
+ foreach($Data["Series"] as $SerieName => $Serie)
+ {
+ if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
+ {
+ $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; $Alpha = $Serie["Color"]["Alpha"]; $Ticks = $Serie["Ticks"]; $Weight = $Serie["Weight"];
+
+ if ( $BreakR == NULL )
+ $BreakSettings = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$VoidTicks);
+ else
+ $BreakSettings = array("R"=>$BreakR,"G"=>$BreakG,"B"=>$BreakB,"Alpha"=>$Alpha,"Ticks"=>$VoidTicks,"Weight"=>$Weight);
+
+ if ( $DisplayColor == DISPLAY_AUTO ) { $DisplayR = $R; $DisplayG = $G; $DisplayB = $B; }
+
+ $AxisID = $Serie["Axis"];
+ $Mode = $Data["Axis"][$AxisID]["Display"];
+ $Format = $Data["Axis"][$AxisID]["Format"];
+ $Unit = $Data["Axis"][$AxisID]["Unit"];
+
+ if (isset($Serie["Description"])) { $SerieDescription = $Serie["Description"]; } else { $SerieDescription = $SerieName; }
+
+ $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"]));
+
+ $this->DataSet->Data["Series"][$SerieName]["XOffset"] = 0;
+
+ if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
+ {
+ if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; }
+ $X = $this->GraphAreaX1 + $XMargin; $WayPoints = "";
+ $Force = $XStep / 5;
+
+ if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
+ $LastGoodY = NULL; $LastGoodX = NULL; $LastX = 1; $LastY = 1;
+ foreach($PosArray as $Key => $Y)
+ {
+ if ( $DisplayValues )
+ $this->drawText($X,$Y-$DisplayOffset,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>TEXT_ALIGN_BOTTOMMIDDLE));
+
+ if ( $RecordImageMap && $Y != VOID ) { $this->addToImageMap("CIRCLE",floor($X).",".floor($Y).",".$ImageMapPlotSize,$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
+
+ if ( $Y == VOID && $LastY != NULL )
+ { $this->drawSpline($WayPoints,array("Force"=>$Force,"R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight)); $WayPoints = ""; }
+
+ if ( $Y != VOID && $LastY == NULL && $LastGoodY != NULL && !$BreakVoid )
+ { $this->drawLine($LastGoodX,$LastGoodY,$X,$Y,$BreakSettings); }
+
+ if ( $Y != VOID )
+ $WayPoints[] = array($X,$Y);
+
+ if ( $Y != VOID ) { $LastGoodY = $Y; $LastGoodX = $X; }
+ if ( $Y == VOID ) { $Y = NULL; }
+
+ $LastX = $X; $LastY = $Y;
+ $X = $X + $XStep;
+ }
+ $this->drawSpline($WayPoints,array("Force"=>$Force,"R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight));
+ }
+ else
+ {
+ if ( $XDivs == 0 ) { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; }
+ $Y = $this->GraphAreaY1 + $XMargin; $WayPoints = "";
+ $Force = $YStep / 5;
+
+ if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
+ $LastGoodY = NULL; $LastGoodX = NULL; $LastX = 1; $LastY = 1;
+ foreach($PosArray as $Key => $X)
+ {
+ if ( $DisplayValues )
+ $this->drawText($X+$DisplayOffset,$Y,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("Angle"=>270,"R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>TEXT_ALIGN_BOTTOMMIDDLE));
+
+ if ( $RecordImageMap && $X != VOID ) { $this->addToImageMap("CIRCLE",floor($X).",".floor($Y).",".$ImageMapPlotSize,$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
+
+ if ( $X == VOID && $LastX != NULL )
+ { $this->drawSpline($WayPoints,array("Force"=>$Force,"R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight)); $WayPoints = ""; }
+
+ if ( $X != VOID && $LastX == NULL && $LastGoodX != NULL && !$BreakVoid )
+ { $this->drawLine($LastGoodX,$LastGoodY,$X,$Y,$BreakSettings); }
+
+ if ( $X != VOID )
+ $WayPoints[] = array($X,$Y);
+
+ if ( $X != VOID ) { $LastGoodX = $X; $LastGoodY = $Y; }
+ if ( $X == VOID ) { $X = NULL; }
+
+ $LastX = $X; $LastY = $Y;
+ $Y = $Y + $YStep;
+ }
+ $this->drawSpline($WayPoints,array("Force"=>$Force,"R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight));
+ }
+ }
+ }
+ }
+
+ /* Draw a filled spline chart */
+ function drawFilledSplineChart($Format=NULL)
+ {
+ $DisplayValues = isset($Format["DisplayValues"]) ? $Format["DisplayValues"] : FALSE;
+ $DisplayOffset = isset($Format["DisplayOffset"]) ? $Format["DisplayOffset"] : 2;
+ $DisplayColor = isset($Format["DisplayColor"]) ? $Format["DisplayColor"] : DISPLAY_MANUAL;
+ $DisplayR = isset($Format["DisplayR"]) ? $Format["DisplayR"] : 0;
+ $DisplayG = isset($Format["DisplayG"]) ? $Format["DisplayG"] : 0;
+ $DisplayB = isset($Format["DisplayB"]) ? $Format["DisplayB"] : 0;
+ $AroundZero = isset($Format["AroundZero"]) ? $Format["AroundZero"] : TRUE;
+ $Threshold = isset($Format["Threshold"]) ? $Format["Threshold"] : NULL;
+
+ $Data = $this->DataSet->getData();
+ list($XMargin,$XDivs) = $this->scaleGetXSettings();
+ foreach($Data["Series"] as $SerieName => $Serie)
+ {
+ if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
+ {
+ $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; $Alpha = $Serie["Color"]["Alpha"]; $Ticks = $Serie["Ticks"];
+ if ( $DisplayColor == DISPLAY_AUTO ) { $DisplayR = $R; $DisplayG = $G; $DisplayB = $B; }
+
+ $AxisID = $Serie["Axis"];
+ $Mode = $Data["Axis"][$AxisID]["Display"];
+ $Format = $Data["Axis"][$AxisID]["Format"];
+ $Unit = $Data["Axis"][$AxisID]["Unit"];
+
+ $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"]));
+ if ( $AroundZero ) { $YZero = $this->scaleComputeY(0,array("AxisID"=>$Serie["Axis"])); }
+
+ if ( $Threshold != NULL )
+ {
+ foreach($Threshold as $Key => $Params)
+ {
+ $Threshold[$Key]["MinX"] = $this->scaleComputeY($Params["Min"],array("AxisID"=>$Serie["Axis"]));
+ $Threshold[$Key]["MaxX"] = $this->scaleComputeY($Params["Max"],array("AxisID"=>$Serie["Axis"]));
+ }
+ }
+
+ $this->DataSet->Data["Series"][$SerieName]["XOffset"] = 0;
+
+ if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
+ {
+ if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; }
+ $X = $this->GraphAreaX1 + $XMargin; $WayPoints = "";
+ $Force = $XStep / 5;
+
+ if ( !$AroundZero ) { $YZero = $this->GraphAreaY2-1; }
+ if ( $YZero > $this->GraphAreaY2-1 ) { $YZero = $this->GraphAreaY2-1; }
+ if ( $YZero < $this->GraphAreaY1+1 ) { $YZero = $this->GraphAreaY1+1; }
+
+ $LastX = ""; $LastY = "";
+ if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
+ foreach($PosArray as $Key => $Y)
+ {
+ if ( $DisplayValues )
+ $this->drawText($X,$Y-$DisplayOffset,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>TEXT_ALIGN_BOTTOMMIDDLE));
+
+ if ( $Y == VOID )
+ {
+ $Area = $this->drawSpline($WayPoints,array("Force"=>$Force,"PathOnly"=>TRUE));
+
+ if ( $Area != "" )
+ {
+ foreach ($Area as $key => $Points)
+ {
+ $Corners = ""; $Corners[] = $Area[$key][0]["X"]; $Corners[] = $YZero;
+ foreach($Points as $subKey => $Point)
+ {
+ if ( $subKey == count($Points)-1) { $Corners[] = $Point["X"]-1; } else { $Corners[] = $Point["X"]; }
+ $Corners[] = $Point["Y"]+1;
+ }
+ $Corners[] = $Points[$subKey]["X"]-1; $Corners[] = $YZero;
+
+ $this->drawPolygonChart($Corners,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha/2,"NoBorder"=>TRUE,"Threshold"=>$Threshold));
+ }
+ $this->drawSpline($WayPoints,array("Force"=>$Force,"R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
+ }
+
+ $WayPoints = "";
+ }
+ else
+ $WayPoints[] = array($X,$Y-.5); /* -.5 for AA visual fix */
+
+ $X = $X + $XStep;
+ }
+ $Area = $this->drawSpline($WayPoints,array("Force"=>$Force,"PathOnly"=>TRUE));
+
+ if ( $Area != "" )
+ {
+ foreach ($Area as $key => $Points)
+ {
+ $Corners = ""; $Corners[] = $Area[$key][0]["X"]; $Corners[] = $YZero;
+ foreach($Points as $subKey => $Point)
+ {
+ if ( $subKey == count($Points)-1) { $Corners[] = $Point["X"]-1; } else { $Corners[] = $Point["X"]; }
+ $Corners[] = $Point["Y"]+1;
+ }
+ $Corners[] = $Points[$subKey]["X"]-1; $Corners[] = $YZero;
+
+ $this->drawPolygonChart($Corners,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha/2,"NoBorder"=>TRUE,"Threshold"=>$Threshold));
+ }
+ $this->drawSpline($WayPoints,array("Force"=>$Force,"R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
+ }
+ }
+ else
+ {
+ if ( $XDivs == 0 ) { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; }
+ $Y = $this->GraphAreaY1 + $XMargin; $WayPoints = "";
+ $Force = $YStep / 5;
+
+ if ( !$AroundZero ) { $YZero = $this->GraphAreaX1+1; }
+ if ( $YZero > $this->GraphAreaX2-1 ) { $YZero = $this->GraphAreaX2-1; }
+ if ( $YZero < $this->GraphAreaX1+1 ) { $YZero = $this->GraphAreaX1+1; }
+
+ if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
+ foreach($PosArray as $Key => $X)
+ {
+ if ( $DisplayValues )
+ $this->drawText($X+$DisplayOffset,$Y,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("Angle"=>270,"R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>TEXT_ALIGN_BOTTOMMIDDLE));
+
+ if ( $X == VOID )
+ {
+ $Area = $this->drawSpline($WayPoints,array("Force"=>$Force,"PathOnly"=>TRUE));
+
+ if ( $Area != "" )
+ {
+ foreach ($Area as $key => $Points)
+ {
+ $Corners = ""; $Corners[] = $YZero; $Corners[] = $Area[$key][0]["Y"];
+ foreach($Points as $subKey => $Point)
+ {
+ if ( $subKey == count($Points)-1) { $Corners[] = $Point["X"]-1; } else { $Corners[] = $Point["X"]; }
+ $Corners[] = $Point["Y"];
+ }
+ $Corners[] = $YZero; $Corners[] = $Points[$subKey]["Y"]-1;
+
+ $this->drawPolygonChart($Corners,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha/2,"NoBorder"=>TRUE,"Threshold"=>$Threshold));
+ }
+ $this->drawSpline($WayPoints,array("Force"=>$Force,"R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
+ }
+
+ $WayPoints = "";
+ }
+ else
+ $WayPoints[] = array($X,$Y);
+
+ $Y = $Y + $YStep;
+ }
+ $Area = $this->drawSpline($WayPoints,array("Force"=>$Force,"PathOnly"=>TRUE));
+
+ if ( $Area != "" )
+ {
+ foreach ($Area as $key => $Points)
+ {
+ $Corners = ""; $Corners[] = $YZero; $Corners[] = $Area[$key][0]["Y"];
+ foreach($Points as $subKey => $Point)
+ {
+ if ( $subKey == count($Points)-1) { $Corners[] = $Point["X"]-1; } else { $Corners[] = $Point["X"]; }
+ $Corners[] = $Point["Y"];
+ }
+ $Corners[] = $YZero; $Corners[] = $Points[$subKey]["Y"]-1;
+
+ $this->drawPolygonChart($Corners,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha/2,"NoBorder"=>TRUE,"Threshold"=>$Threshold));
+ }
+ $this->drawSpline($WayPoints,array("Force"=>$Force,"R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
+ }
+
+ }
+ }
+ }
+ }
+
+ /* Draw a line chart */
+ function drawLineChart($Format=NULL)
+ {
+ $BreakVoid = isset($Format["BreakVoid"]) ? $Format["BreakVoid"] : TRUE;
+ $VoidTicks = isset($Format["VoidTicks"]) ? $Format["VoidTicks"] : 4;
+ $BreakR = isset($Format["BreakR"]) ? $Format["BreakR"] : NULL;
+ $BreakG = isset($Format["BreakG"]) ? $Format["BreakG"] : NULL;
+ $BreakB = isset($Format["BreakB"]) ? $Format["BreakB"] : NULL;
+ $DisplayValues = isset($Format["DisplayValues"]) ? $Format["DisplayValues"] : FALSE;
+ $DisplayOffset = isset($Format["DisplayOffset"]) ? $Format["DisplayOffset"] : 2;
+ $DisplayColor = isset($Format["DisplayColor"]) ? $Format["DisplayColor"] : DISPLAY_MANUAL;
+ $DisplayR = isset($Format["DisplayR"]) ? $Format["DisplayR"] : 0;
+ $DisplayG = isset($Format["DisplayG"]) ? $Format["DisplayG"] : 0;
+ $DisplayB = isset($Format["DisplayB"]) ? $Format["DisplayB"] : 0;
+ $RecordImageMap = isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE;
+ $ImageMapPlotSize = isset($Format["ImageMapPlotSize"]) ? $Format["ImageMapPlotSize"] : 5;
+
+ $Data = $this->DataSet->getData();
+ list($XMargin,$XDivs) = $this->scaleGetXSettings();
+ foreach($Data["Series"] as $SerieName => $Serie)
+ {
+ if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
+ {
+ $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; $Alpha = $Serie["Color"]["Alpha"]; $Ticks = $Serie["Ticks"]; $Weight = $Serie["Weight"];
+
+ if ( $BreakR == NULL )
+ $BreakSettings = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$VoidTicks,"Weight"=>$Weight);
+ else
+ $BreakSettings = array("R"=>$BreakR,"G"=>$BreakG,"B"=>$BreakB,"Alpha"=>$Alpha,"Ticks"=>$VoidTicks,"Weight"=>$Weight);
+
+ if ( $DisplayColor == DISPLAY_AUTO ) { $DisplayR = $R; $DisplayG = $G; $DisplayB = $B; }
+
+ $AxisID = $Serie["Axis"];
+ $Mode = $Data["Axis"][$AxisID]["Display"];
+ $Format = $Data["Axis"][$AxisID]["Format"];
+ $Unit = $Data["Axis"][$AxisID]["Unit"];
+
+ if (isset($Serie["Description"])) { $SerieDescription = $Serie["Description"]; } else { $SerieDescription = $SerieName; }
+
+ $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"]));
+
+ $this->DataSet->Data["Series"][$SerieName]["XOffset"] = 0;
+
+ if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
+ {
+ if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; }
+ $X = $this->GraphAreaX1 + $XMargin; $LastX = NULL; $LastY = NULL;
+
+ if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
+ $LastGoodY = NULL; $LastGoodX = NULL;
+ foreach($PosArray as $Key => $Y)
+ {
+ if ( $DisplayValues && $Serie["Data"][$Key] != VOID )
+ {
+ if ( $Serie["Data"][$Key] > 0 ) { $Align = TEXT_ALIGN_BOTTOMMIDDLE; $Offset = $DisplayOffset; } else { $Align = TEXT_ALIGN_TOPMIDDLE; $Offset = -$DisplayOffset; }
+ $this->drawText($X,$Y-$Offset-$Weight,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>$Align));
+ }
+
+ if ( $RecordImageMap && $Y != VOID ) { $this->addToImageMap("CIRCLE",floor($X).",".floor($Y).",".$ImageMapPlotSize,$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
+
+ if ( $Y != VOID && $LastX != NULL && $LastY != NULL )
+ $this->drawLine($LastX,$LastY,$X,$Y,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight));
+
+ if ( $Y != VOID && $LastY == NULL && $LastGoodY != NULL && !$BreakVoid )
+ { $this->drawLine($LastGoodX,$LastGoodY,$X,$Y,$BreakSettings); $LastGoodY = NULL; }
+
+ if ( $Y != VOID ) { $LastGoodY = $Y; $LastGoodX = $X; }
+ if ( $Y == VOID ) { $Y = NULL; }
+
+ $LastX = $X; $LastY = $Y;
+ $X = $X + $XStep;
+ }
+ }
+ else
+ {
+ if ( $XDivs == 0 ) { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; }
+ $Y = $this->GraphAreaY1 + $XMargin; $LastX = NULL; $LastY = NULL;
+
+ if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
+ $LastGoodY = NULL; $LastGoodX = NULL;
+ foreach($PosArray as $Key => $X)
+ {
+ if ( $DisplayValues && $Serie["Data"][$Key] != VOID )
+ { $this->drawText($X+$DisplayOffset+$Weight,$Y,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("Angle"=>270,"R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>TEXT_ALIGN_BOTTOMMIDDLE)); }
+
+ if ( $RecordImageMap && $X != VOID ) { $this->addToImageMap("CIRCLE",floor($X).",".floor($Y).",".$ImageMapPlotSize,$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
+
+ if ( $X != VOID && $LastX != NULL && $LastY != NULL )
+ $this->drawLine($LastX,$LastY,$X,$Y,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight));
+
+ if ( $X != VOID && $LastX == NULL && $LastGoodY != NULL && !$BreakVoid )
+ { $this->drawLine($LastGoodX,$LastGoodY,$X,$Y,$BreakSettings); $LastGoodY = NULL; }
+
+ if ( $X != VOID ) { $LastGoodY = $Y; $LastGoodX = $X; }
+ if ( $X == VOID ) { $X = NULL; }
+
+ $LastX = $X; $LastY = $Y;
+ $Y = $Y + $YStep;
+ }
+ }
+ }
+ }
+ }
+
+ /* Draw a line chart */
+ function drawZoneChart($SerieA,$SerieB,$Format=NULL)
+ {
+ $AxisID = isset($Format["AxisID"]) ? $Format["AxisID"] : 0;
+ $LineR = isset($Format["LineR"]) ? $Format["LineR"] : 150;
+ $LineG = isset($Format["LineG"]) ? $Format["LineG"] : 150;
+ $LineB = isset($Format["LineB"]) ? $Format["LineB"] : 150;
+ $LineAlpha = isset($Format["LineAlpha"]) ? $Format["LineAlpha"] : 50;
+ $LineTicks = isset($Format["LineTicks"]) ? $Format["LineTicks"] : 1;
+ $AreaR = isset($Format["AreaR"]) ? $Format["AreaR"] : 150;
+ $AreaG = isset($Format["AreaG"]) ? $Format["AreaG"] : 150;
+ $AreaB = isset($Format["AreaB"]) ? $Format["AreaB"] : 150;
+ $AreaAlpha = isset($Format["AreaAlpha"]) ? $Format["AreaAlpha"] : 5;
+
+ $Data = $this->DataSet->getData();
+ if ( !isset($Data["Series"][$SerieA]["Data"]) || !isset($Data["Series"][$SerieB]["Data"]) ) { return(0); }
+ $SerieAData = $Data["Series"][$SerieA]["Data"];
+ $SerieBData = $Data["Series"][$SerieB]["Data"];
+
+ list($XMargin,$XDivs) = $this->scaleGetXSettings();
+
+ $Mode = $Data["Axis"][$AxisID]["Display"];
+ $Format = $Data["Axis"][$AxisID]["Format"];
+ $Unit = $Data["Axis"][$AxisID]["Unit"];
+
+ $PosArrayA = $this->scaleComputeY($SerieAData,array("AxisID"=>$AxisID));
+ $PosArrayB = $this->scaleComputeY($SerieBData,array("AxisID"=>$AxisID));
+ if ( count($PosArrayA) != count($PosArrayB) ) { return(0); }
+
+ if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
+ {
+ if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; }
+ $X = $this->GraphAreaX1 + $XMargin; $LastX = NULL; $LastY = NULL;
+
+ $LastX = NULL; $LastY1 = NULL; $LastY2 = NULL;
+ $BoundsA = ""; $BoundsB = "";
+ foreach($PosArrayA as $Key => $Y1)
+ {
+ $Y2 = $PosArrayB[$Key];
+
+ $BoundsA[] = $X; $BoundsA[] = $Y1;
+ $BoundsB[] = $X; $BoundsB[] = $Y2;
+
+ $LastX = $X;
+ $LastY1 = $Y1; $LastY2 = $Y2;
+
+ $X = $X + $XStep;
+ }
+ $Bounds = array_merge($BoundsA,$this->reversePlots($BoundsB));
+ $this->drawPolygonChart($Bounds,array("R"=>$AreaR,"G"=>$AreaG,"B"=>$AreaB,"Alpha"=>$AreaAlpha));
+
+ for($i=0;$i<=count($BoundsA)-4;$i=$i+2)
+ {
+ $this->drawLine($BoundsA[$i],$BoundsA[$i+1],$BoundsA[$i+2],$BoundsA[$i+3],array("R"=>$LineR,"G"=>$LineG,"B"=>$LineB,"Alpha"=>$LineAlpha,"Ticks"=>$LineTicks));
+ $this->drawLine($BoundsB[$i],$BoundsB[$i+1],$BoundsB[$i+2],$BoundsB[$i+3],array("R"=>$LineR,"G"=>$LineG,"B"=>$LineB,"Alpha"=>$LineAlpha,"Ticks"=>$LineTicks));
+ }
+ }
+ else
+ {
+ if ( $XDivs == 0 ) { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; }
+ $Y = $this->GraphAreaY1 + $XMargin; $LastX = NULL; $LastY = NULL;
+
+ $LastY = NULL; $LastX1 = NULL; $LastX2 = NULL;
+ $BoundsA = ""; $BoundsB = "";
+ foreach($PosArrayA as $Key => $X1)
+ {
+ $X2 = $PosArrayB[$Key];
+
+ $BoundsA[] = $X1; $BoundsA[] = $Y;
+ $BoundsB[] = $X2; $BoundsB[] = $Y;
+
+ $LastY = $Y;
+ $LastX1 = $X1; $LastX2 = $X2;
+
+ $Y = $Y + $YStep;
+ }
+ $Bounds = array_merge($BoundsA,$this->reversePlots($BoundsB));
+ $this->drawPolygonChart($Bounds,array("R"=>$AreaR,"G"=>$AreaG,"B"=>$AreaB,"Alpha"=>$AreaAlpha));
+
+ for($i=0;$i<=count($BoundsA)-4;$i=$i+2)
+ {
+ $this->drawLine($BoundsA[$i],$BoundsA[$i+1],$BoundsA[$i+2],$BoundsA[$i+3],array("R"=>$LineR,"G"=>$LineG,"B"=>$LineB,"Alpha"=>$LineAlpha,"Ticks"=>$LineTicks));
+ $this->drawLine($BoundsB[$i],$BoundsB[$i+1],$BoundsB[$i+2],$BoundsB[$i+3],array("R"=>$LineR,"G"=>$LineG,"B"=>$LineB,"Alpha"=>$LineAlpha,"Ticks"=>$LineTicks));
+ }
+ }
+ }
+
+ /* Draw a step chart */
+ function drawStepChart($Format=NULL)
+ {
+ $BreakVoid = isset($Format["BreakVoid"]) ? $Format["BreakVoid"] : FALSE;
+ $ReCenter = isset($Format["ReCenter"]) ? $Format["ReCenter"] : TRUE;
+ $VoidTicks = isset($Format["VoidTicks"]) ? $Format["VoidTicks"] : 4;
+ $BreakR = isset($Format["BreakR"]) ? $Format["BreakR"] : NULL;
+ $BreakG = isset($Format["BreakG"]) ? $Format["BreakG"] : NULL;
+ $BreakB = isset($Format["BreakB"]) ? $Format["BreakB"] : NULL;
+ $DisplayValues = isset($Format["DisplayValues"]) ? $Format["DisplayValues"] :FALSE;
+ $DisplayOffset = isset($Format["DisplayOffset"]) ? $Format["DisplayOffset"] : 2;
+ $DisplayColor = isset($Format["DisplayColor"]) ? $Format["DisplayColor"] : DISPLAY_MANUAL;
+ $DisplayR = isset($Format["DisplayR"]) ? $Format["DisplayR"] : 0;
+ $DisplayG = isset($Format["DisplayG"]) ? $Format["DisplayG"] : 0;
+ $DisplayB = isset($Format["DisplayB"]) ? $Format["DisplayB"] : 0;
+ $RecordImageMap = isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE;
+ $ImageMapPlotSize = isset($Format["ImageMapPlotSize"]) ? $Format["ImageMapPlotSize"] : 5;
+
+ $Data = $this->DataSet->getData();
+ list($XMargin,$XDivs) = $this->scaleGetXSettings();
+ foreach($Data["Series"] as $SerieName => $Serie)
+ {
+ if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
+ {
+ $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; $Alpha = $Serie["Color"]["Alpha"]; $Ticks = $Serie["Ticks"]; $Weight = $Serie["Weight"];
+
+ if (isset($Serie["Description"])) { $SerieDescription = $Serie["Description"]; } else { $SerieDescription = $SerieName; }
+
+ if ( $BreakR == NULL )
+ $BreakSettings = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$VoidTicks,"Weight"=>$Weight);
+ else
+ $BreakSettings = array("R"=>$BreakR,"G"=>$BreakG,"B"=>$BreakB,"Alpha"=>$Alpha,"Ticks"=>$VoidTicks,"Weight"=>$Weight);
+
+ if ( $DisplayColor == DISPLAY_AUTO ) { $DisplayR = $R; $DisplayG = $G; $DisplayB = $B; }
+
+ $AxisID = $Serie["Axis"];
+ $Mode = $Data["Axis"][$AxisID]["Display"];
+ $Format = $Data["Axis"][$AxisID]["Format"];
+ $Unit = $Data["Axis"][$AxisID]["Unit"];
+ $Color = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight);
+
+ $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"]));
+
+ $this->DataSet->Data["Series"][$SerieName]["XOffset"] = 0;
+
+ if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
+ {
+ if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; }
+ $X = $this->GraphAreaX1 + $XMargin; $LastX = NULL; $LastY = NULL;
+
+ if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
+ $LastGoodY = NULL; $LastGoodX = NULL; $Init = FALSE;
+ foreach($PosArray as $Key => $Y)
+ {
+ if ( $DisplayValues && $Serie["Data"][$Key] != VOID )
+ {
+ if ( $Y <= $LastY ) { $Align = TEXT_ALIGN_BOTTOMMIDDLE; $Offset = $DisplayOffset; } else { $Align = TEXT_ALIGN_TOPMIDDLE; $Offset = -$DisplayOffset; }
+ $this->drawText($X,$Y-$Offset-$Weight,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>$Align));
+ }
+
+ if ( $Y != VOID && $LastX != NULL && $LastY != NULL )
+ {
+ $this->drawLine($LastX,$LastY,$X,$LastY,$Color);
+ $this->drawLine($X,$LastY,$X,$Y,$Color);
+ if ( $ReCenter && $X+$XStep < $this->GraphAreaX2 - $XMargin )
+ {
+ $this->drawLine($X,$Y,$X+$XStep,$Y,$Color);
+ if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($X-$ImageMapPlotSize).",".floor($Y-$ImageMapPlotSize).",".floor($X+$XStep+$ImageMapPlotSize).",".floor($Y+$ImageMapPlotSize),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
+ }
+ else
+ { if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($LastX-$ImageMapPlotSize).",".floor($LastY-$ImageMapPlotSize).",".floor($X+$ImageMapPlotSize).",".floor($LastY+$ImageMapPlotSize),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); } }
+ }
+
+ if ( $Y != VOID && $LastY == NULL && $LastGoodY != NULL && !$BreakVoid )
+ {
+ if ( $ReCenter )
+ {
+ $this->drawLine($LastGoodX+$XStep,$LastGoodY,$X,$LastGoodY,$BreakSettings);
+ if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($LastGoodX+$XStep-$ImageMapPlotSize).",".floor($LastGoodY-$ImageMapPlotSize).",".floor($X+$ImageMapPlotSize).",".floor($LastGoodY+$ImageMapPlotSize),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
+ }
+ else
+ {
+ $this->drawLine($LastGoodX,$LastGoodY,$X,$LastGoodY,$BreakSettings);
+ if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($LastGoodX-$ImageMapPlotSize).",".floor($LastGoodY-$ImageMapPlotSize).",".floor($X+$ImageMapPlotSize).",".floor($LastGoodY+$ImageMapPlotSize),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
+ }
+
+ $this->drawLine($X,$LastGoodY,$X,$Y,$BreakSettings);
+ $LastGoodY = NULL;
+ }
+ elseif( !$BreakVoid && $LastGoodY == NULL && $Y != VOID )
+ {
+ $this->drawLine($this->GraphAreaX1 + $XMargin,$Y,$X,$Y,$BreakSettings);
+ if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($this->GraphAreaX1+$XMargin-$ImageMapPlotSize).",".floor($Y-$ImageMapPlotSize).",".floor($X+$ImageMapPlotSize).",".floor($Y+$ImageMapPlotSize),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
+ }
+
+ if ( $Y != VOID ) { $LastGoodY = $Y; $LastGoodX = $X; }
+ if ( $Y == VOID ) { $Y = NULL; }
+
+ if ( !$Init && $ReCenter ) { $X = $X - $XStep/2; $Init = TRUE; }
+ $LastX = $X; $LastY = $Y;
+ if ( $LastX < $this->GraphAreaX1 + $XMargin ) { $LastX = $this->GraphAreaX1 + $XMargin; }
+ $X = $X + $XStep;
+ }
+ if ( $ReCenter )
+ {
+ $this->drawLine($LastX,$LastY,$this->GraphAreaX2 - $XMargin,$LastY,$Color);
+ if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($LastX-$ImageMapPlotSize).",".floor($LastY-$ImageMapPlotSize).",".floor($this->GraphAreaX2-$XMargin+$ImageMapPlotSize).",".floor($LastY+$ImageMapPlotSize),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
+ }
+ }
+ else
+ {
+ if ( $XDivs == 0 ) { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; }
+ $Y = $this->GraphAreaY1 + $XMargin; $LastX = NULL; $LastY = NULL;
+
+ if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
+ $LastGoodY = NULL; $LastGoodX = NULL; $Init = FALSE;
+ foreach($PosArray as $Key => $X)
+ {
+ if ( $DisplayValues && $Serie["Data"][$Key] != VOID )
+ {
+ if ( $X >= $LastX ) { $Align = TEXT_ALIGN_MIDDLELEFT; $Offset = $DisplayOffset; } else { $Align = TEXT_ALIGN_MIDDLERIGHT; $Offset = -$DisplayOffset; }
+ $this->drawText($X+$Offset+$Weight,$Y,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>$Align));
+ }
+
+ if ( $X != VOID && $LastX != NULL && $LastY != NULL )
+ {
+ $this->drawLine($LastX,$LastY,$LastX,$Y,$Color);
+ $this->drawLine($LastX,$Y,$X,$Y,$Color);
+
+ if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($LastX-$ImageMapPlotSize).",".floor($LastY-$ImageMapPlotSize).",".floor($LastX+$XStep+$ImageMapPlotSize).",".floor($Y+$ImageMapPlotSize),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
+ }
+
+ if ( $X != VOID && $LastX == NULL && $LastGoodY != NULL && !$BreakVoid )
+ {
+ $this->drawLine($LastGoodX,$LastGoodY,$LastGoodX,$LastGoodY+$YStep,$Color);
+ if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($LastGoodX-$ImageMapPlotSize).",".floor($LastGoodY-$ImageMapPlotSize).",".floor($LastGoodX+$ImageMapPlotSize).",".floor($LastGoodY+$YStep+$ImageMapPlotSize),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
+
+ $this->drawLine($LastGoodX,$LastGoodY+$YStep,$LastGoodX,$Y,$BreakSettings);
+ if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($LastGoodX-$ImageMapPlotSize).",".floor($LastGoodY+$YStep-$ImageMapPlotSize).",".floor($LastGoodX+$ImageMapPlotSize).",".floor($YStep+$ImageMapPlotSize),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
+
+ $this->drawLine($LastGoodX,$Y,$X,$Y,$BreakSettings);
+ $LastGoodY = NULL;
+ }
+ elseif ( $X != VOID && $LastGoodY == NULL && !$BreakVoid )
+ {
+ $this->drawLine($X,$this->GraphAreaY1 + $XMargin,$X,$Y,$BreakSettings);
+ if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($X-$ImageMapPlotSize).",".floor($this->GraphAreaY1+$XMargin-$ImageMapPlotSize).",".floor($X+$ImageMapPlotSize).",".floor($Y+$ImageMapPlotSize),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
+ }
+
+ if ( $X != VOID ) { $LastGoodY = $Y; $LastGoodX = $X; }
+ if ( $X == VOID ) { $X = NULL; }
+
+ if ( !$Init && $ReCenter ) { $Y = $Y - $YStep/2; $Init = TRUE; }
+ $LastX = $X; $LastY = $Y;
+ if ( $LastY < $this->GraphAreaY1 + $XMargin ) { $LastY = $this->GraphAreaY1 + $XMargin; }
+ $Y = $Y + $YStep;
+ }
+ if ( $ReCenter )
+ {
+ $this->drawLine($LastX,$LastY,$LastX,$this->GraphAreaY2 - $XMargin,$Color);
+ if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($LastX-$ImageMapPlotSize).",".floor($LastY-$ImageMapPlotSize).",".floor($LastX+$ImageMapPlotSize).",".floor($this->GraphAreaY2-$XMargin+$ImageMapPlotSize),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
+ }
+ }
+ }
+ }
+ }
+
+ /* Draw a step chart */
+ function drawFilledStepChart($Format=NULL)
+ {
+ $ReCenter = isset($Format["ReCenter"]) ? $Format["ReCenter"] : TRUE;
+ $DisplayValues = isset($Format["DisplayValues"]) ? $Format["DisplayValues"] :FALSE;
+ $DisplayOffset = isset($Format["DisplayOffset"]) ? $Format["DisplayOffset"] : 2;
+ $DisplayColor = isset($Format["DisplayColor"]) ? $Format["DisplayColor"] : DISPLAY_MANUAL;
+ $ForceTransparency = isset($Format["ForceTransparency"]) ? $Format["ForceTransparency"] : NULL;
+ $DisplayR = isset($Format["DisplayR"]) ? $Format["DisplayR"] : 0;
+ $DisplayG = isset($Format["DisplayG"]) ? $Format["DisplayG"] : 0;
+ $DisplayB = isset($Format["DisplayB"]) ? $Format["DisplayB"] : 0;
+ $AroundZero = isset($Format["AroundZero"]) ? $Format["AroundZero"] : TRUE;
+
+ $Data = $this->DataSet->getData();
+ list($XMargin,$XDivs) = $this->scaleGetXSettings();
+ foreach($Data["Series"] as $SerieName => $Serie)
+ {
+ if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
+ {
+ $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; $Alpha = $Serie["Color"]["Alpha"]; $Ticks = $Serie["Ticks"]; $Weight = $Serie["Weight"];
+
+ if ( $DisplayColor == DISPLAY_AUTO ) { $DisplayR = $R; $DisplayG = $G; $DisplayB = $B; }
+
+ $AxisID = $Serie["Axis"];
+ $Mode = $Data["Axis"][$AxisID]["Display"];
+ $Format = $Data["Axis"][$AxisID]["Format"];
+ $Unit = $Data["Axis"][$AxisID]["Unit"];
+
+ $Color = array("R"=>$R,"G"=>$G,"B"=>$B);
+ if ( $ForceTransparency != NULL ) { $Color["Alpha"] = $ForceTransparency; } else { $Color["Alpha"] = $Alpha; }
+
+ $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"]));
+ $YZero = $this->scaleComputeY(0,array("AxisID"=>$Serie["Axis"]));
+
+ $this->DataSet->Data["Series"][$SerieName]["XOffset"] = 0;
+
+ if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
+ {
+ if ( $YZero > $this->GraphAreaY2-1 ) { $YZero = $this->GraphAreaY2-1; }
+ if ( $YZero < $this->GraphAreaY1+1 ) { $YZero = $this->GraphAreaY1+1; }
+
+ if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; }
+ $X = $this->GraphAreaX1 + $XMargin; $LastX = NULL; $LastY = NULL;
+
+ if ( !$AroundZero ) { $YZero = $this->GraphAreaY2-1; }
+
+ if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
+ $LastGoodY = NULL; $LastGoodX = NULL; $Points = ""; $Init = FALSE;
+ foreach($PosArray as $Key => $Y)
+ {
+ if ( $Y == VOID && $LastX != NULL && $LastY != NULL && $Points !="" )
+ {
+ $Points[] = $LastX; $Points[] = $LastY;
+ $Points[] = $X; $Points[] = $LastY;
+ $Points[] = $X; $Points[] = $YZero;
+ $this->drawPolygon($Points,$Color);
+ $Points = "";
+ }
+
+ if ( $Y != VOID && $LastX != NULL && $LastY != NULL )
+ {
+ if ( $Points == "") { $Points[] = $LastX; $Points[] = $YZero; }
+ $Points[] = $LastX; $Points[] = $LastY;
+ $Points[] = $X; $Points[] = $LastY;
+ $Points[] = $X; $Points[] = $Y;
+ }
+
+ if ( $Y != VOID ) { $LastGoodY = $Y; $LastGoodX = $X; }
+ if ( $Y == VOID ) { $Y = NULL; }
+
+ if ( !$Init && $ReCenter ) { $X = $X - $XStep/2; $Init = TRUE; }
+ $LastX = $X; $LastY = $Y;
+ if ( $LastX < $this->GraphAreaX1 + $XMargin ) { $LastX = $this->GraphAreaX1 + $XMargin; }
+ $X = $X + $XStep;
+ }
+
+ if ( $ReCenter )
+ {
+ $Points[] = $LastX+$XStep/2; $Points[] = $LastY;
+ $Points[] = $LastX+$XStep/2; $Points[] = $YZero;
+ }
+ else
+ { $Points[] = $LastX; $Points[] = $YZero; }
+
+ $this->drawPolygon($Points,$Color);
+ }
+ else
+ {
+ if ( $YZero < $this->GraphAreaX1+1 ) { $YZero = $this->GraphAreaX1+1; }
+ if ( $YZero > $this->GraphAreaX2-1 ) { $YZero = $this->GraphAreaX2-1; }
+
+ if ( $XDivs == 0 ) { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; }
+ $Y = $this->GraphAreaY1 + $XMargin; $LastX = NULL; $LastY = NULL;
+
+ if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
+ $LastGoodY = NULL; $LastGoodX = NULL; $Points = "";
+ foreach($PosArray as $Key => $X)
+ {
+ if ( $X == VOID && $LastX != NULL && $LastY != NULL && $Points !="" )
+ {
+ $Points[] = $LastX; $Points[] = $LastY;
+ $Points[] = $LastX; $Points[] = $Y;
+ $Points[] = $YZero; $Points[] = $Y;
+ $this->drawPolygon($Points,$Color);
+ $Points = "";
+ }
+
+ if ( $X != VOID && $LastX != NULL && $LastY != NULL )
+ {
+ if ( $Points == "") { $Points[] = $YZero; $Points[] = $LastY; }
+ $Points[] = $LastX; $Points[] = $LastY;
+ $Points[] = $LastX; $Points[] = $Y;
+ $Points[] = $X; $Points[] = $Y;
+ }
+
+ if ( $X != VOID ) { $LastGoodY = $Y; $LastGoodX = $X; }
+ if ( $X == VOID ) { $X = NULL; }
+
+ if ( $LastX == NULL && $ReCenter ) { $Y = $Y - $YStep/2; }
+ $LastX = $X; $LastY = $Y;
+ if ( $LastY < $this->GraphAreaY1 + $XMargin ) { $LastY = $this->GraphAreaY1 + $XMargin; }
+ $Y = $Y + $YStep;
+ }
+
+ if ( $ReCenter )
+ {
+ $Points[] = $LastX; $Points[] = $LastY+$YStep/2;
+ $Points[] = $YZero; $Points[] = $LastY+$YStep/2;
+ }
+ else
+ { $Points[] = $YZero; $Points[] = $LastY; }
+
+ $this->drawPolygon($Points,$Color);
+ }
+ }
+ }
+ }
+
+ /* Draw an area chart */
+ function drawAreaChart($Format=NULL)
+ {
+ $DisplayValues = isset($Format["DisplayValues"]) ? $Format["DisplayValues"] : FALSE;
+ $DisplayOffset = isset($Format["DisplayOffset"]) ? $Format["DisplayOffset"] : 2;
+ $DisplayColor = isset($Format["DisplayColor"]) ? $Format["DisplayColor"] : DISPLAY_MANUAL;
+ $DisplayR = isset($Format["DisplayR"]) ? $Format["DisplayR"] : 0;
+ $DisplayG = isset($Format["DisplayG"]) ? $Format["DisplayG"] : 0;
+ $DisplayB = isset($Format["DisplayB"]) ? $Format["DisplayB"] : 0;
+ $ForceTransparency = isset($Format["ForceTransparency"]) ? $Format["ForceTransparency"] : 25;
+ $AroundZero = isset($Format["AroundZero"]) ? $Format["AroundZero"] : TRUE;
+ $Threshold = isset($Format["Threshold"]) ? $Format["Threshold"] : NULL;
+
+ $Data = $this->DataSet->getData();
+ list($XMargin,$XDivs) = $this->scaleGetXSettings();
+
+ foreach($Data["Series"] as $SerieName => $Serie)
+ {
+ if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
+ {
+ $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; $Alpha = $Serie["Color"]["Alpha"]; $Ticks = $Serie["Ticks"];
+ if ( $DisplayColor == DISPLAY_AUTO ) { $DisplayR = $R; $DisplayG = $G; $DisplayB = $B; }
+
+ $AxisID = $Serie["Axis"];
+ $Mode = $Data["Axis"][$AxisID]["Display"];
+ $Format = $Data["Axis"][$AxisID]["Format"];
+ $Unit = $Data["Axis"][$AxisID]["Unit"];
+
+ $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"]));
+ $YZero = $this->scaleComputeY(0,array("AxisID"=>$Serie["Axis"]));
+
+ if ( $Threshold != NULL )
+ {
+ foreach($Threshold as $Key => $Params)
+ {
+ $Threshold[$Key]["MinX"] = $this->scaleComputeY($Params["Min"],array("AxisID"=>$Serie["Axis"]));
+ $Threshold[$Key]["MaxX"] = $this->scaleComputeY($Params["Max"],array("AxisID"=>$Serie["Axis"]));
+ }
+ }
+
+ $this->DataSet->Data["Series"][$SerieName]["XOffset"] = 0;
+
+ if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
+ {
+ if ( $YZero > $this->GraphAreaY2-1 ) { $YZero = $this->GraphAreaY2-1; }
+
+ $Areas = ""; $AreaID = 0;
+ $Areas[$AreaID][] = $this->GraphAreaX1 + $XMargin;
+ if ( $AroundZero ) { $Areas[$AreaID][] = $YZero; } else { $Areas[$AreaID][] = $this->GraphAreaY2-1; }
+
+ if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; }
+ $X = $this->GraphAreaX1 + $XMargin; $LastX = NULL; $LastY = NULL;
+
+ if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
+ foreach($PosArray as $Key => $Y)
+ {
+ if ( $DisplayValues && $Serie["Data"][$Key] != VOID )
+ {
+ if ( $Serie["Data"][$Key] > 0 ) { $Align = TEXT_ALIGN_BOTTOMMIDDLE; $Offset = $DisplayOffset; } else { $Align = TEXT_ALIGN_TOPMIDDLE; $Offset = -$DisplayOffset; }
+ $this->drawText($X,$Y-$Offset,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>$Align));
+ }
+
+ if ( $Y == VOID && isset($Areas[$AreaID]) )
+ {
+ if($LastX == NULL)
+ { $Areas[$AreaID][] = $X; }
+ else
+ { $Areas[$AreaID][] = $LastX; }
+
+ if ( $AroundZero ) { $Areas[$AreaID][] = $YZero; } else { $Areas[$AreaID][] = $this->GraphAreaY2-1; }
+ $AreaID++;
+ }
+ elseif ($Y != VOID)
+ {
+ if ( !isset($Areas[$AreaID]) )
+ {
+ $Areas[$AreaID][] = $X;
+ if ( $AroundZero ) { $Areas[$AreaID][] = $YZero; } else { $Areas[$AreaID][] = $this->GraphAreaY2-1; }
+ }
+
+ $Areas[$AreaID][] = $X;
+ $Areas[$AreaID][] = $Y;
+ }
+
+ $LastX = $X;
+ $X = $X + $XStep;
+ }
+ $Areas[$AreaID][] = $LastX;
+ if ( $AroundZero ) { $Areas[$AreaID][] = $YZero; } else { $Areas[$AreaID][] = $this->GraphAreaY2-1; }
+
+ $Alpha = $ForceTransparency != NULL ? $ForceTransparency : $Alpha;
+ $Color = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Threshold"=>$Threshold);
+ foreach($Areas as $Key => $Points)
+ $this->drawPolygonChart($Points,$Color);
+ }
+ else
+ {
+ if ( $YZero < $this->GraphAreaX1+1 ) { $YZero = $this->GraphAreaX1+1; }
+ if ( $YZero > $this->GraphAreaX2-1 ) { $YZero = $this->GraphAreaX2-1; }
+
+ $Areas = ""; $AreaID = 0;
+ if ( $AroundZero ) { $Areas[$AreaID][] = $YZero; } else { $Areas[$AreaID][] = $this->GraphAreaX1+1; }
+ $Areas[$AreaID][] = $this->GraphAreaY1 + $XMargin;
+
+ if ( $XDivs == 0 ) { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; }
+ $Y = $this->GraphAreaY1 + $XMargin; $LastX = NULL; $LastY = NULL;
+
+ if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
+ foreach($PosArray as $Key => $X)
+ {
+ if ( $DisplayValues && $Serie["Data"][$Key] != VOID )
+ {
+ if ( $Serie["Data"][$Key] > 0 ) { $Align = TEXT_ALIGN_BOTTOMMIDDLE; $Offset = $DisplayOffset; } else { $Align = TEXT_ALIGN_TOPMIDDLE; $Offset = -$DisplayOffset; }
+ $this->drawText($X+$Offset,$Y,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("Angle"=>270,"R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>$Align));
+ }
+
+ if ( $X == VOID && isset($Areas[$AreaID]) )
+ {
+ if ( $AroundZero ) { $Areas[$AreaID][] = $YZero; } else { $Areas[$AreaID][] = $this->GraphAreaX1+1; }
+
+ if($LastY == NULL)
+ { $Areas[$AreaID][] = $Y; }
+ else
+ { $Areas[$AreaID][] = $LastY; }
+
+ $AreaID++;
+ }
+ elseif ($X != VOID)
+ {
+ if ( !isset($Areas[$AreaID]) )
+ {
+ if ( $AroundZero ) { $Areas[$AreaID][] = $YZero; } else { $Areas[$AreaID][] = $this->GraphAreaX1+1; }
+ $Areas[$AreaID][] = $Y;
+ }
+
+ $Areas[$AreaID][] = $X;
+ $Areas[$AreaID][] = $Y;
+ }
+
+ $LastX = $X; $LastY = $Y;
+ $Y = $Y + $YStep;
+ }
+ if ( $AroundZero ) { $Areas[$AreaID][] = $YZero; } else { $Areas[$AreaID][] = $this->GraphAreaX1+1; }
+ $Areas[$AreaID][] = $LastY;
+
+ $Alpha = $ForceTransparency != NULL ? $ForceTransparency : $Alpha;
+ $Color = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Threshold"=>$Threshold);
+ foreach($Areas as $Key => $Points)
+ $this->drawPolygonChart($Points,$Color);
+ }
+ }
+ }
+ }
+
+
+ /* Draw a bar chart */
+ function drawBarChart($Format=NULL)
+ {
+ $Floating0Serie = isset($Format["Floating0Serie"]) ? $Format["Floating0Serie"] : NULL;
+ $Floating0Value = isset($Format["Floating0Value"]) ? $Format["Floating0Value"] : NULL;
+ $Draw0Line = isset($Format["Draw0Line"]) ? $Format["Draw0Line"] : FALSE;
+ $DisplayValues = isset($Format["DisplayValues"]) ? $Format["DisplayValues"] : FALSE;
+ $DisplayOffset = isset($Format["DisplayOffset"]) ? $Format["DisplayOffset"] : 2;
+ $DisplayColor = isset($Format["DisplayColor"]) ? $Format["DisplayColor"] : DISPLAY_MANUAL;
+ $DisplayFont = isset($Format["DisplaySize"]) ? $Format["DisplaySize"] : $this->FontName;
+ $DisplaySize = isset($Format["DisplaySize"]) ? $Format["DisplaySize"] : $this->FontSize;
+ $DisplayPos = isset($Format["DisplayPos"]) ? $Format["DisplayPos"] : LABEL_POS_OUTSIDE;
+ $DisplayShadow = isset($Format["DisplayShadow"]) ? $Format["DisplayShadow"] : TRUE;
+ $DisplayR = isset($Format["DisplayR"]) ? $Format["DisplayR"] : 0;
+ $DisplayG = isset($Format["DisplayG"]) ? $Format["DisplayG"] : 0;
+ $DisplayB = isset($Format["DisplayB"]) ? $Format["DisplayB"] : 0;
+ $AroundZero = isset($Format["AroundZero"]) ? $Format["AroundZero"] : TRUE;
+ $Interleave = isset($Format["Interleave"]) ? $Format["Interleave"] : .5;
+ $Rounded = isset($Format["Rounded"]) ? $Format["Rounded"] : FALSE;
+ $RoundRadius = isset($Format["RoundRadius"]) ? $Format["RoundRadius"] : 4;
+ $Surrounding = isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL;
+ $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : -1;
+ $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : -1;
+ $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : -1;
+ $Gradient = isset($Format["Gradient"]) ? $Format["Gradient"] : FALSE;
+ $GradientMode = isset($Format["GradientMode"]) ? $Format["GradientMode"] : GRADIENT_SIMPLE;
+ $GradientAlpha = isset($Format["GradientAlpha"]) ? $Format["GradientAlpha"] : 20;
+ $GradientStartR = isset($Format["GradientStartR"]) ? $Format["GradientStartR"] : 255;
+ $GradientStartG = isset($Format["GradientStartG"]) ? $Format["GradientStartG"] : 255;
+ $GradientStartB = isset($Format["GradientStartB"]) ? $Format["GradientStartB"] : 255;
+ $GradientEndR = isset($Format["GradientEndR"]) ? $Format["GradientEndR"] : 0;
+ $GradientEndG = isset($Format["GradientEndG"]) ? $Format["GradientEndG"] : 0;
+ $GradientEndB = isset($Format["GradientEndB"]) ? $Format["GradientEndB"] : 0;
+ $TxtMargin = isset($Format["TxtMargin"]) ? $Format["TxtMargin"] : 6;
+ $OverrideColors = isset($Format["OverrideColors"]) ? $Format["OverrideColors"] : NULL;
+ $OverrideSurrounding = isset($Format["OverrideSurrounding"]) ? $Format["OverrideSurrounding"] : 30;
+ $InnerSurrounding = isset($Format["InnerSurrounding"]) ? $Format["InnerSurrounding"] : NULL;
+ $InnerBorderR = isset($Format["InnerBorderR"]) ? $Format["InnerBorderR"] : -1;
+ $InnerBorderG = isset($Format["InnerBorderG"]) ? $Format["InnerBorderG"] : -1;
+ $InnerBorderB = isset($Format["InnerBorderB"]) ? $Format["InnerBorderB"] : -1;
+ $RecordImageMap = isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE;
+
+ $Data = $this->DataSet->getData();
+ list($XMargin,$XDivs) = $this->scaleGetXSettings();
+
+ if ( $OverrideColors != NULL )
+ {
+ $OverrideColors = $this->validatePalette($OverrideColors,$OverrideSurrounding);
+ $this->DataSet->saveExtendedData("Palette",$OverrideColors);
+ }
+
+ $RestoreShadow = $this->Shadow;
+
+ $SeriesCount = $this->countDrawableSeries();
+ $CurrentSerie = 0;
+ foreach($Data["Series"] as $SerieName => $Serie)
+ {
+ if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
+ {
+ $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; $Alpha = $Serie["Color"]["Alpha"]; $Ticks = $Serie["Ticks"];
+ if ( $DisplayColor == DISPLAY_AUTO ) { $DisplayR = $R; $DisplayG = $G; $DisplayB = $B; }
+ if ( $Surrounding != NULL ) { $BorderR = $R+$Surrounding; $BorderG = $G+$Surrounding; $BorderB = $B+$Surrounding; }
+ if ( $InnerSurrounding != NULL ) { $InnerBorderR = $R+$InnerSurrounding; $InnerBorderG = $G+$InnerSurrounding; $InnerBorderB = $B+$InnerSurrounding; }
+ if ( $InnerBorderR == -1 ) { $InnerColor = NULL; } else { $InnerColor = array("R"=>$InnerBorderR,"G"=>$InnerBorderG,"B"=>$InnerBorderB); }
+ $Color = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"BorderR"=>$BorderR,"BorderG"=>$BorderG,"BorderB"=>$BorderB);
+
+ $AxisID = $Serie["Axis"];
+ $Mode = $Data["Axis"][$AxisID]["Display"];
+ $Format = $Data["Axis"][$AxisID]["Format"];
+ $Unit = $Data["Axis"][$AxisID]["Unit"];
+
+ if (isset($Serie["Description"])) { $SerieDescription = $Serie["Description"]; } else { $SerieDescription = $SerieName; }
+
+ $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"]));
+
+ if ( $Floating0Value != NULL )
+ { $YZero = $this->scaleComputeY($Floating0Value,array("AxisID"=>$Serie["Axis"])); }
+ else
+ { $YZero = $this->scaleComputeY(0,array("AxisID"=>$Serie["Axis"])); }
+
+ if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
+ {
+ if ( $YZero > $this->GraphAreaY2-1 ) { $YZero = $this->GraphAreaY2-1; }
+ if ( $YZero < $this->GraphAreaY1+1 ) { $YZero = $this->GraphAreaY1+1; }
+
+ if ( $XDivs == 0 ) { $XStep = 0; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; }
+ $X = $this->GraphAreaX1 + $XMargin;
+
+ if ( $AroundZero ) { $Y1 = $YZero; } else { $Y1 = $this->GraphAreaY2-1; }
+ if ( $XDivs == 0 ) { $XSize = ($this->GraphAreaX2-$this->GraphAreaX1)/($SeriesCount+$Interleave); } else { $XSize = ($XStep / ($SeriesCount+$Interleave) ); }
+
+ $XOffset = -($XSize*$SeriesCount)/2 + $CurrentSerie * $XSize;
+ if ( $X + $XOffset <= $this->GraphAreaX1 ) { $XOffset = $this->GraphAreaX1 - $X + 1 ; }
+
+ $this->DataSet->Data["Series"][$SerieName]["XOffset"] = $XOffset + $XSize / 2;
+
+ if ( $Rounded || $BorderR != -1) { $XSpace = 1; } else { $XSpace = 0; }
+
+ if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
+
+ $ID = 0;
+ foreach($PosArray as $Key => $Y2)
+ {
+ if ( $Floating0Serie != NULL )
+ {
+ if ( isset($Data["Series"][$Floating0Serie]["Data"][$Key]) )
+ { $Value = $Data["Series"][$Floating0Serie]["Data"][$Key]; }
+ else
+ { $Value = 0; }
+
+ $YZero = $this->scaleComputeY($Value,array("AxisID"=>$Serie["Axis"]));
+ if ( $YZero > $this->GraphAreaY2-1 ) { $YZero = $this->GraphAreaY2-1; }
+ if ( $YZero < $this->GraphAreaY1+1 ) { $YZero = $this->GraphAreaY1+1; }
+
+ if ( $AroundZero ) { $Y1 = $YZero; } else { $Y1 = $this->GraphAreaY2-1; }
+ }
+
+ if ( $OverrideColors != NULL )
+ { if ( isset($OverrideColors[$ID]) ) { $Color = array("R"=>$OverrideColors[$ID]["R"],"G"=>$OverrideColors[$ID]["G"],"B"=>$OverrideColors[$ID]["B"],"Alpha"=>$OverrideColors[$ID]["Alpha"],"BorderR"=>$OverrideColors[$ID]["BorderR"],"BorderG"=>$OverrideColors[$ID]["BorderG"],"BorderB"=>$OverrideColors[$ID]["BorderB"]); } else { $Color = $this->getRandomColor(); } }
+
+ if ( $Y2 != VOID )
+ {
+ $BarHeight = $Y1 - $Y2;
+
+ if ( $Serie["Data"][$Key] == 0 )
+ $this->drawLine($X+$XOffset+$XSpace,$Y1,$X+$XOffset+$XSize-$XSpace,$Y1,$Color);
+ else
+ {
+ if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($X+$XOffset+$XSpace).",".floor($Y1).",".floor($X+$XOffset+$XSize-$XSpace).",".floor($Y2),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
+
+ if ( $Rounded )
+ $this->drawRoundedFilledRectangle($X+$XOffset+$XSpace,$Y1,$X+$XOffset+$XSize-$XSpace,$Y2,$RoundRadius,$Color);
+ else
+ {
+ $this->drawFilledRectangle($X+$XOffset+$XSpace,$Y1,$X+$XOffset+$XSize-$XSpace,$Y2,$Color);
+
+ if ( $InnerColor != NULL ) { $this->drawRectangle($X+$XOffset+$XSpace+1,min($Y1,$Y2)+1,$X+$XOffset+$XSize-$XSpace-1,max($Y1,$Y2)-1,$InnerColor); }
+
+ if ( $Gradient )
+ {
+ $this->Shadow = FALSE;
+
+ if ( $GradientMode == GRADIENT_SIMPLE )
+ {
+ if ( $Serie["Data"][$Key] >= 0 )
+ $GradienColor = array("StartR"=>$GradientStartR,"StartG"=>$GradientStartG,"StartB"=>$GradientStartB,"EndR"=>$GradientEndR,"EndG"=>$GradientEndG,"EndB"=>$GradientEndB,"Alpha"=>$GradientAlpha);
+ else
+ $GradienColor = array("StartR"=>$GradientEndR,"StartG"=>$GradientEndG,"StartB"=>$GradientEndB,"EndR"=>$GradientStartR,"EndG"=>$GradientStartG,"EndB"=>$GradientStartB,"Alpha"=>$GradientAlpha);
+
+ $this->drawGradientArea($X+$XOffset+$XSpace,$Y1,$X+$XOffset+$XSize-$XSpace,$Y2,DIRECTION_VERTICAL,$GradienColor);
+ }
+ elseif ( $GradientMode == GRADIENT_EFFECT_CAN )
+ {
+ $GradienColor1 = array("StartR"=>$GradientEndR,"StartG"=>$GradientEndG,"StartB"=>$GradientEndB,"EndR"=>$GradientStartR,"EndG"=>$GradientStartG,"EndB"=>$GradientStartB,"Alpha"=>$GradientAlpha);
+ $GradienColor2 = array("StartR"=>$GradientStartR,"StartG"=>$GradientStartG,"StartB"=>$GradientStartB,"EndR"=>$GradientEndR,"EndG"=>$GradientEndG,"EndB"=>$GradientEndB,"Alpha"=>$GradientAlpha);
+ $XSpan = floor($XSize / 3);
+
+ $this->drawGradientArea($X+$XOffset+$XSpace,$Y1,$X+$XOffset+$XSpan-$XSpace,$Y2,DIRECTION_HORIZONTAL,$GradienColor1);
+ $this->drawGradientArea($X+$XOffset+$XSpan+$XSpace,$Y1,$X+$XOffset+$XSize-$XSpace,$Y2,DIRECTION_HORIZONTAL,$GradienColor2);
+ }
+ $this->Shadow = $RestoreShadow;
+ }
+ }
+
+ if ( $Draw0Line )
+ {
+ $Line0Color = array("R"=>0,"G"=>0,"B"=>0,"Alpha"=>20);
+
+ if ( abs($Y1 - $Y2) > 3 ) { $Line0Width = 3; } else { $Line0Width = 1; }
+ if ( $Y1 - $Y2 < 0 ) { $Line0Width = -$Line0Width; }
+
+ $this->drawFilledRectangle($X+$XOffset+$XSpace,floor($Y1),$X+$XOffset+$XSize-$XSpace,floor($Y1)-$Line0Width,$Line0Color);
+ $this->drawLine($X+$XOffset+$XSpace,floor($Y1),$X+$XOffset+$XSize-$XSpace,floor($Y1),$Line0Color);
+ }
+ }
+
+ if ( $DisplayValues && $Serie["Data"][$Key] != VOID )
+ {
+ if ( $DisplayShadow ) { $this->Shadow = TRUE; }
+
+ $Caption = $this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit);
+ $TxtPos = $this->getTextBox(0,0,$DisplayFont,$DisplaySize,90,$Caption);
+ $TxtHeight = $TxtPos[0]["Y"] - $TxtPos[1]["Y"] + $TxtMargin;
+
+ if ( $DisplayPos == LABEL_POS_INSIDE && abs($TxtHeight) < abs($BarHeight) )
+ {
+ $CenterX = (($X+$XOffset+$XSize-$XSpace)-($X+$XOffset+$XSpace))/2 + $X+$XOffset+$XSpace;
+ $CenterY = ($Y2-$Y1)/2 + $Y1;
+
+ $this->drawText($CenterX,$CenterY,$Caption,array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>TEXT_ALIGN_MIDDLEMIDDLE,"FontSize"=>$DisplaySize,"Angle"=>90));
+ }
+ else
+ {
+ if ( $Serie["Data"][$Key] >= 0 ) { $Align = TEXT_ALIGN_BOTTOMMIDDLE; $Offset = $DisplayOffset; } else { $Align = TEXT_ALIGN_TOPMIDDLE; $Offset = -$DisplayOffset; }
+ $this->drawText($X+$XOffset+$XSize/2,$Y2-$Offset,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>$Align,"FontSize"=>$DisplaySize));
+ }
+
+ $this->Shadow = $RestoreShadow;
+ }
+ }
+
+ $X = $X + $XStep;
+ $ID++;
+ }
+ }
+ else
+ {
+ if ( $YZero < $this->GraphAreaX1+1 ) { $YZero = $this->GraphAreaX1+1; }
+ if ( $YZero > $this->GraphAreaX2-1 ) { $YZero = $this->GraphAreaX2-1; }
+
+ if ( $XDivs == 0 ) { $YStep = 0; } else { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; }
+
+ $Y = $this->GraphAreaY1 + $XMargin;
+
+ if ( $AroundZero ) { $X1 = $YZero; } else { $X1 = $this->GraphAreaX1+1; }
+ if ( $XDivs == 0 ) { $YSize = ($this->GraphAreaY2-$this->GraphAreaY1)/($SeriesCount+$Interleave); } else { $YSize = ($YStep / ($SeriesCount+$Interleave) ); }
+
+ $YOffset = -($YSize*$SeriesCount)/2 + $CurrentSerie * $YSize;
+ if ( $Y + $YOffset <= $this->GraphAreaY1 ) { $YOffset = $this->GraphAreaY1 - $Y + 1 ; }
+
+ $this->DataSet->Data["Series"][$SerieName]["XOffset"] = $YOffset + $YSize / 2;
+
+ if ( $Rounded || $BorderR != -1 ) { $YSpace = 1; } else { $YSpace = 0; }
+
+ if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
+
+ $ID = 0 ;
+ foreach($PosArray as $Key => $X2)
+ {
+ if ( $Floating0Serie != NULL )
+ {
+ if ( isset($Data["Series"][$Floating0Serie]["Data"][$Key]) )
+ $Value = $Data["Series"][$Floating0Serie]["Data"][$Key];
+ else { $Value = 0; }
+
+ $YZero = $this->scaleComputeY($Value,array("AxisID"=>$Serie["Axis"]));
+ if ( $YZero < $this->GraphAreaX1+1 ) { $YZero = $this->GraphAreaX1+1; }
+ if ( $YZero > $this->GraphAreaX2-1 ) { $YZero = $this->GraphAreaX2-1; }
+ if ( $AroundZero ) { $X1 = $YZero; } else { $X1 = $this->GraphAreaX1+1; }
+ }
+
+ if ( $OverrideColors != NULL )
+ { if ( isset($OverrideColors[$ID]) ) { $Color = array("R"=>$OverrideColors[$ID]["R"],"G"=>$OverrideColors[$ID]["G"],"B"=>$OverrideColors[$ID]["B"],"Alpha"=>$OverrideColors[$ID]["Alpha"],"BorderR"=>$OverrideColors[$ID]["BorderR"],"BorderG"=>$OverrideColors[$ID]["BorderG"],"BorderB"=>$OverrideColors[$ID]["BorderB"]); } else { $Color = $this->getRandomColor(); } }
+
+ if ( $X2 != VOID )
+ {
+ $BarWidth = $X2 - $X1;
+
+ if ( $Serie["Data"][$Key] == 0 )
+ $this->drawLine($X1,$Y+$YOffset+$YSpace,$X1,$Y+$YOffset+$YSize-$YSpace,$Color);
+ else
+ {
+ if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($X1).",".floor($Y+$YOffset+$YSpace).",".floor($X2).",".floor($Y+$YOffset+$YSize-$YSpace),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
+
+ if ( $Rounded )
+ $this->drawRoundedFilledRectangle($X1+1,$Y+$YOffset+$YSpace,$X2,$Y+$YOffset+$YSize-$YSpace,$RoundRadius,$Color);
+ else
+ {
+ $this->drawFilledRectangle($X1,$Y+$YOffset+$YSpace,$X2,$Y+$YOffset+$YSize-$YSpace,$Color);
+
+ if ( $InnerColor != NULL ) { $this->drawRectangle(min($X1,$X2)+1,$Y+$YOffset+$YSpace+1,max($X1,$X2)-1,$Y+$YOffset+$YSize-$YSpace-1,$InnerColor); }
+
+ if ( $Gradient )
+ {
+ $this->Shadow = FALSE;
+
+ if ( $GradientMode == GRADIENT_SIMPLE )
+ {
+ if ( $Serie["Data"][$Key] >= 0 )
+ $GradienColor = array("StartR"=>$GradientStartR,"StartG"=>$GradientStartG,"StartB"=>$GradientStartB,"EndR"=>$GradientEndR,"EndG"=>$GradientEndG,"EndB"=>$GradientEndB,"Alpha"=>$GradientAlpha);
+ else
+ $GradienColor = array("StartR"=>$GradientEndR,"StartG"=>$GradientEndG,"StartB"=>$GradientEndB,"EndR"=>$GradientStartR,"EndG"=>$GradientStartG,"EndB"=>$GradientStartB,"Alpha"=>$GradientAlpha);
+
+ $this->drawGradientArea($X1,$Y+$YOffset+$YSpace,$X2,$Y+$YOffset+$YSize-$YSpace,DIRECTION_HORIZONTAL,$GradienColor);
+ }
+ elseif ( $GradientMode == GRADIENT_EFFECT_CAN )
+ {
+ $GradienColor1 = array("StartR"=>$GradientEndR,"StartG"=>$GradientEndG,"StartB"=>$GradientEndB,"EndR"=>$GradientStartR,"EndG"=>$GradientStartG,"EndB"=>$GradientStartB,"Alpha"=>$GradientAlpha);
+ $GradienColor2 = array("StartR"=>$GradientStartR,"StartG"=>$GradientStartG,"StartB"=>$GradientStartB,"EndR"=>$GradientEndR,"EndG"=>$GradientEndG,"EndB"=>$GradientEndB,"Alpha"=>$GradientAlpha);
+ $YSpan = floor($YSize / 3);
+
+ $this->drawGradientArea($X1,$Y+$YOffset+$YSpace,$X2,$Y+$YOffset+$YSpan-$YSpace,DIRECTION_VERTICAL,$GradienColor1);
+ $this->drawGradientArea($X1,$Y+$YOffset+$YSpan,$X2,$Y+$YOffset+$YSize-$YSpace,DIRECTION_VERTICAL,$GradienColor2);
+ }
+ $this->Shadow = $RestoreShadow;
+ }
+ }
+
+ if ( $Draw0Line )
+ {
+ $Line0Color = array("R"=>0,"G"=>0,"B"=>0,"Alpha"=>20);
+
+ if ( abs($X1 - $X2) > 3 ) { $Line0Width = 3; } else { $Line0Width = 1; }
+ if ( $X2 - $X1 < 0 ) { $Line0Width = -$Line0Width; }
+
+ $this->drawFilledRectangle(floor($X1),$Y+$YOffset+$YSpace,floor($X1)+$Line0Width,$Y+$YOffset+$YSize-$YSpace,$Line0Color);
+ $this->drawLine(floor($X1),$Y+$YOffset+$YSpace,floor($X1),$Y+$YOffset+$YSize-$YSpace,$Line0Color);
+ }
+ }
+
+ if ( $DisplayValues && $Serie["Data"][$Key] != VOID )
+ {
+ if ( $DisplayShadow ) { $this->Shadow = TRUE; }
+
+ $Caption = $this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit);
+ $TxtPos = $this->getTextBox(0,0,$DisplayFont,$DisplaySize,0,$Caption);
+ $TxtWidth = $TxtPos[1]["X"] - $TxtPos[0]["X"] + $TxtMargin;
+
+ if ( $DisplayPos == LABEL_POS_INSIDE && abs($TxtWidth) < abs($BarWidth) )
+ {
+ $CenterX = ($X2-$X1)/2 + $X1;
+ $CenterY = (($Y+$YOffset+$YSize-$YSpace)-($Y+$YOffset+$YSpace))/2 + ($Y+$YOffset+$YSpace);
+
+ $this->drawText($CenterX,$CenterY,$Caption,array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>TEXT_ALIGN_MIDDLEMIDDLE,"FontSize"=>$DisplaySize));
+ }
+ else
+ {
+ if ( $Serie["Data"][$Key] >= 0 ) { $Align = TEXT_ALIGN_MIDDLELEFT; $Offset = $DisplayOffset; } else { $Align = TEXT_ALIGN_MIDDLERIGHT; $Offset = -$DisplayOffset; }
+ $this->drawText($X2+$Offset,$Y+$YOffset+$YSize/2,$Caption,array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>$Align,"FontSize"=>$DisplaySize));
+ }
+
+ $this->Shadow = $RestoreShadow;
+ }
+ }
+ $Y = $Y + $YStep;
+ $ID++;
+ }
+ }
+ $CurrentSerie++;
+ }
+ }
+ }
+
+ /* Draw a bar chart */
+ function drawStackedBarChart($Format=NULL)
+ {
+ $DisplayValues = isset($Format["DisplayValues"]) ? $Format["DisplayValues"] : FALSE;
+ $DisplayRound = isset($Format["DisplayRound"]) ? $Format["DisplayRound"] : 0;
+ $DisplayColor = isset($Format["DisplayColor"]) ? $Format["DisplayColor"] : DISPLAY_MANUAL;
+ $DisplayFont = isset($Format["DisplayFont"]) ? $Format["DisplayFont"] : $this->FontName;
+ $DisplaySize = isset($Format["DisplaySize"]) ? $Format["DisplaySize"] : $this->FontSize;
+ $DisplayR = isset($Format["DisplayR"]) ? $Format["DisplayR"] : 0;
+ $DisplayG = isset($Format["DisplayG"]) ? $Format["DisplayG"] : 0;
+ $DisplayB = isset($Format["DisplayB"]) ? $Format["DisplayB"] : 0;
+ $Interleave = isset($Format["Interleave"]) ? $Format["Interleave"] : .5;
+ $Rounded = isset($Format["Rounded"]) ? $Format["Rounded"] : FALSE;
+ $RoundRadius = isset($Format["RoundRadius"]) ? $Format["RoundRadius"] : 4;
+ $Surrounding = isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL;
+ $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : -1;
+ $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : -1;
+ $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : -1;
+ $Gradient = isset($Format["Gradient"]) ? $Format["Gradient"] : FALSE;
+ $GradientMode = isset($Format["GradientMode"]) ? $Format["GradientMode"] : GRADIENT_SIMPLE;
+ $GradientAlpha = isset($Format["GradientAlpha"]) ? $Format["GradientAlpha"] : 20;
+ $GradientStartR = isset($Format["GradientStartR"]) ? $Format["GradientStartR"] : 255;
+ $GradientStartG = isset($Format["GradientStartG"]) ? $Format["GradientStartG"] : 255;
+ $GradientStartB = isset($Format["GradientStartB"]) ? $Format["GradientStartB"] : 255;
+ $GradientEndR = isset($Format["GradientEndR"]) ? $Format["GradientEndR"] : 0;
+ $GradientEndG = isset($Format["GradientEndG"]) ? $Format["GradientEndG"] : 0;
+ $GradientEndB = isset($Format["GradientEndB"]) ? $Format["GradientEndB"] : 0;
+ $InnerSurrounding = isset($Format["InnerSurrounding"]) ? $Format["InnerSurrounding"] : NULL;
+ $InnerBorderR = isset($Format["InnerBorderR"]) ? $Format["InnerBorderR"] : -1;
+ $InnerBorderG = isset($Format["InnerBorderG"]) ? $Format["InnerBorderG"] : -1;
+ $InnerBorderB = isset($Format["InnerBorderB"]) ? $Format["InnerBorderB"] : -1;
+ $RecordImageMap = isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE;
+
+ $Data = $this->DataSet->getData();
+ list($XMargin,$XDivs) = $this->scaleGetXSettings();
+
+ $RestoreShadow = $this->Shadow;
+
+ $LastX = ""; $LastY = "";
+ foreach($Data["Series"] as $SerieName => $Serie)
+ {
+ if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
+ {
+ $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; $Alpha = $Serie["Color"]["Alpha"]; $Ticks = $Serie["Ticks"];
+ if ( $DisplayColor == DISPLAY_AUTO ) { $DisplayR = 255; $DisplayG = 255; $DisplayB = 255; }
+ if ( $Surrounding != NULL ) { $BorderR = $R+$Surrounding; $BorderG = $G+$Surrounding; $BorderB = $B+$Surrounding; }
+ if ( $InnerSurrounding != NULL ) { $InnerBorderR = $R+$InnerSurrounding; $InnerBorderG = $G+$InnerSurrounding; $InnerBorderB = $B+$InnerSurrounding; }
+ if ( $InnerBorderR == -1 ) { $InnerColor = NULL; } else { $InnerColor = array("R"=>$InnerBorderR,"G"=>$InnerBorderG,"B"=>$InnerBorderB); }
+
+ $AxisID = $Serie["Axis"];
+ $Mode = $Data["Axis"][$AxisID]["Display"];
+ $Format = $Data["Axis"][$AxisID]["Format"];
+ $Unit = $Data["Axis"][$AxisID]["Unit"];
+
+ if (isset($Serie["Description"])) { $SerieDescription = $Serie["Description"]; } else { $SerieDescription = $SerieName; }
+
+ $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"]),TRUE);
+ $YZero = $this->scaleComputeY(0,array("AxisID"=>$Serie["Axis"]));
+
+ $this->DataSet->Data["Series"][$SerieName]["XOffset"] = 0;
+
+ $Color = array("TransCorner"=>TRUE,"R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"BorderR"=>$BorderR,"BorderG"=>$BorderG,"BorderB"=>$BorderB);
+
+ if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
+ {
+ if ( $YZero > $this->GraphAreaY2-1 ) { $YZero = $this->GraphAreaY2-1; }
+ if ( $YZero > $this->GraphAreaY2-1 ) { $YZero = $this->GraphAreaY2-1; }
+
+ if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; }
+ $X = $this->GraphAreaX1 + $XMargin;
+
+ $XSize = ($XStep / (1+$Interleave) );
+ $XOffset = -($XSize/2);
+
+ if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
+ foreach($PosArray as $Key => $Height)
+ {
+ if ( $Height != VOID && $Serie["Data"][$Key] != 0 )
+ {
+ if ( $Serie["Data"][$Key] > 0 ) { $Pos = "+"; } else { $Pos = "-"; }
+
+ if ( !isset($LastY[$Key] ) ) { $LastY[$Key] = ""; }
+ if ( !isset($LastY[$Key][$Pos] ) ) { $LastY[$Key][$Pos] = $YZero; }
+
+ $Y1 = $LastY[$Key][$Pos];
+ $Y2 = $Y1 - $Height;
+
+ if ( ($Rounded || $BorderR != -1) && ($Pos == "+" && $Y1 != $YZero) ) { $YSpaceUp = 1; } else { $YSpaceUp = 0; }
+ if ( ($Rounded || $BorderR != -1) && ($Pos == "-" && $Y1 != $YZero) ) { $YSpaceDown = 1; } else { $YSpaceDown = 0; }
+
+ if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($X+$XOffset).",".floor($Y1-$YSpaceUp+$YSpaceDown).",".floor($X+$XOffset+$XSize).",".floor($Y2),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
+
+ if ( $Rounded )
+ $this->drawRoundedFilledRectangle($X+$XOffset,$Y1-$YSpaceUp+$YSpaceDown,$X+$XOffset+$XSize,$Y2,$RoundRadius,$Color);
+ else
+ {
+ $this->drawFilledRectangle($X+$XOffset,$Y1-$YSpaceUp+$YSpaceDown,$X+$XOffset+$XSize,$Y2,$Color);
+
+ if ( $InnerColor != NULL ) { $RestoreShadow = $this->Shadow; $this->Shadow = FALSE; $this->drawRectangle(min($X+$XOffset+1,$X+$XOffset+$XSize),min($Y1-$YSpaceUp+$YSpaceDown,$Y2)+1,max($X+$XOffset+1,$X+$XOffset+$XSize)-1,max($Y1-$YSpaceUp+$YSpaceDown,$Y2)-1,$InnerColor); $this->Shadow = $RestoreShadow;}
+
+ if ( $Gradient )
+ {
+ $this->Shadow = FALSE;
+
+ if ( $GradientMode == GRADIENT_SIMPLE )
+ {
+ $GradientColor = array("StartR"=>$GradientStartR,"StartG"=>$GradientStartG,"StartB"=>$GradientStartB,"EndR"=>$GradientEndR,"EndG"=>$GradientEndG,"EndB"=>$GradientEndB,"Alpha"=>$GradientAlpha);
+ $this->drawGradientArea($X+$XOffset-.5,$Y1-.5-$YSpaceUp+$YSpaceDown,$X+$XOffset+$XSize,$Y2+.5,DIRECTION_VERTICAL,$GradientColor);
+ }
+ elseif ( $GradientMode == GRADIENT_EFFECT_CAN )
+ {
+ $GradientColor1 = array("StartR"=>$GradientEndR,"StartG"=>$GradientEndG,"StartB"=>$GradientEndB,"EndR"=>$GradientStartR,"EndG"=>$GradientStartG,"EndB"=>$GradientStartB,"Alpha"=>$GradientAlpha);
+ $GradientColor2 = array("StartR"=>$GradientStartR,"StartG"=>$GradientStartG,"StartB"=>$GradientStartB,"EndR"=>$GradientEndR,"EndG"=>$GradientEndG,"EndB"=>$GradientEndB,"Alpha"=>$GradientAlpha);
+ $XSpan = floor($XSize / 3);
+
+ $this->drawGradientArea($X+$XOffset-.5,$Y1-.5-$YSpaceUp+$YSpaceDown,$X+$XOffset+$XSpan,$Y2+.5,DIRECTION_HORIZONTAL,$GradientColor1);
+ $this->drawGradientArea($X+$XSpan+$XOffset-.5,$Y1-.5-$YSpaceUp+$YSpaceDown,$X+$XOffset+$XSize,$Y2+.5,DIRECTION_HORIZONTAL,$GradientColor2);
+ }
+ $this->Shadow = $RestoreShadow;
+ }
+ }
+
+ if ( $DisplayValues )
+ {
+ $BarHeight = abs($Y2-$Y1);
+
+ $Caption = $this->scaleFormat(round($Serie["Data"][$Key],$DisplayRound),$Mode,$Format,$Unit);
+ $TxtPos = $this->getTextBox(0,0,$DisplayFont,$DisplaySize,0,$Caption);
+ $TxtHeight = abs($TxtPos[2]["Y"] - $TxtPos[0]["Y"]);
+
+ if ( $BarHeight > $TxtHeight )
+ {
+ $XCenter = ( ($X+$XOffset+$XSize) - ($X+$XOffset) ) / 2 + $X+$XOffset;
+ $YCenter = ( ($Y2) - ($Y1-$YSpaceUp+$YSpaceDown) ) / 2 + $Y1-$YSpaceUp+$YSpaceDown;
+
+ $this->drawText($XCenter,$YCenter,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>TEXT_ALIGN_MIDDLEMIDDLE,"FontSize"=>$DisplaySize,"FontName"=>$DisplayFont));
+ }
+ }
+
+ $LastY[$Key][$Pos] = $Y2;
+ }
+
+ $X = $X + $XStep;
+ }
+ }
+ else
+ {
+ if ( $YZero < $this->GraphAreaX1+1 ) { $YZero = $this->GraphAreaX1+1; }
+ if ( $YZero > $this->GraphAreaX2-1 ) { $YZero = $this->GraphAreaX2-1; }
+
+ if ( $XDivs == 0 ) { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; }
+ $Y = $this->GraphAreaY1 + $XMargin;
+
+ $YSize = $YStep / (1+$Interleave);
+ $YOffset = -($YSize/2);
+
+ if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
+ foreach($PosArray as $Key => $Width)
+ {
+ if ( $Width != VOID && $Serie["Data"][$Key] != 0 )
+ {
+ if ( $Serie["Data"][$Key] > 0 ) { $Pos = "+"; } else { $Pos = "-"; }
+
+ if ( !isset($LastX[$Key] ) ) { $LastX[$Key] = ""; }
+ if ( !isset($LastX[$Key][$Pos] ) ) { $LastX[$Key][$Pos] = $YZero; }
+
+ $X1 = $LastX[$Key][$Pos];
+ $X2 = $X1 + $Width;
+
+ if ( ($Rounded || $BorderR != -1) && ($Pos == "+" && $X1 != $YZero) ) { $XSpaceLeft = 2; } else { $XSpaceLeft = 0; }
+ if ( ($Rounded || $BorderR != -1) && ($Pos == "-" && $X1 != $YZero) ) { $XSpaceRight = 2; } else { $XSpaceRight = 0; }
+
+ if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($X1+$XSpaceLeft).",".floor($Y+$YOffset).",".floor($X2-$XSpaceRight).",".floor($Y+$YOffset+$YSize),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
+
+ if ( $Rounded )
+ $this->drawRoundedFilledRectangle($X1+$XSpaceLeft,$Y+$YOffset,$X2-$XSpaceRight,$Y+$YOffset+$YSize,$RoundRadius,$Color);
+ else
+ {
+ $this->drawFilledRectangle($X1+$XSpaceLeft,$Y+$YOffset,$X2-$XSpaceRight,$Y+$YOffset+$YSize,$Color);
+
+ if ( $InnerColor != NULL ) { $RestoreShadow = $this->Shadow; $this->Shadow = FALSE; $this->drawRectangle(min($X1+$XSpaceLeft,$X2-$XSpaceRight)+1,min($Y+$YOffset,$Y+$YOffset+$YSize)+1,max($X1+$XSpaceLeft,$X2-$XSpaceRight)-1,max($Y+$YOffset,$Y+$YOffset+$YSize)-1,$InnerColor); $this->Shadow = $RestoreShadow;}
+
+ if ( $Gradient )
+ {
+ $this->Shadow = FALSE;
+
+ if ( $GradientMode == GRADIENT_SIMPLE )
+ {
+ $GradientColor = array("StartR"=>$GradientStartR,"StartG"=>$GradientStartG,"StartB"=>$GradientStartB,"EndR"=>$GradientEndR,"EndG"=>$GradientEndG,"EndB"=>$GradientEndB,"Alpha"=>$GradientAlpha);
+ $this->drawGradientArea($X1+$XSpaceLeft,$Y+$YOffset,$X2-$XSpaceRight,$Y+$YOffset+$YSize,DIRECTION_HORIZONTAL,$GradientColor);
+ }
+ elseif ( $GradientMode == GRADIENT_EFFECT_CAN )
+ {
+ $GradientColor1 = array("StartR"=>$GradientEndR,"StartG"=>$GradientEndG,"StartB"=>$GradientEndB,"EndR"=>$GradientStartR,"EndG"=>$GradientStartG,"EndB"=>$GradientStartB,"Alpha"=>$GradientAlpha);
+ $GradientColor2 = array("StartR"=>$GradientStartR,"StartG"=>$GradientStartG,"StartB"=>$GradientStartB,"EndR"=>$GradientEndR,"EndG"=>$GradientEndG,"EndB"=>$GradientEndB,"Alpha"=>$GradientAlpha);
+ $YSpan = floor($YSize / 3);
+
+ $this->drawGradientArea($X1+$XSpaceLeft,$Y+$YOffset,$X2-$XSpaceRight,$Y+$YOffset+$YSpan,DIRECTION_VERTICAL,$GradientColor1);
+ $this->drawGradientArea($X1+$XSpaceLeft,$Y+$YOffset+$YSpan,$X2-$XSpaceRight,$Y+$YOffset+$YSize,DIRECTION_VERTICAL,$GradientColor2);
+ }
+ $this->Shadow = $RestoreShadow;
+ }
+ }
+
+ if ( $DisplayValues )
+ {
+ $BarWidth = abs($X2-$X1);
+
+ $Caption = $this->scaleFormat(round($Serie["Data"][$Key],$DisplayRound),$Mode,$Format,$Unit);
+ $TxtPos = $this->getTextBox(0,0,$DisplayFont,$DisplaySize,0,$Caption);
+ $TxtWidth = abs($TxtPos[1]["X"] - $TxtPos[0]["X"]);
+
+ if ( $BarWidth > $TxtWidth )
+ {
+ $XCenter = ( $X2 - $X1 ) / 2 + $X1;
+ $YCenter = ( ($Y+$YOffset+$YSize) - ($Y+$YOffset) ) / 2 + $Y+$YOffset;
+
+ $this->drawText($XCenter,$YCenter,$Caption,array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>TEXT_ALIGN_MIDDLEMIDDLE,"FontSize"=>$DisplaySize,"FontName"=>$DisplayFont));
+ }
+ }
+
+ $LastX[$Key][$Pos] = $X2;
+ }
+
+ $Y = $Y + $YStep;
+ }
+ }
+ }
+ }
+ }
+
+ /* Draw a bar chart */
+ function drawStackedAreaChart($Format=NULL)
+ {
+ $DisplayValues = isset($Format["DisplayValues"]) ? $Format["DisplayValues"] : FALSE;
+ $DisplayRound = isset($Format["DisplayRound"]) ? $Format["DisplayRound"] : 0;
+ $DisplayColor = isset($Format["DisplayColor"]) ? $Format["DisplayColor"] : DISPLAY_MANUAL;
+ $DisplayFont = isset($Format["DisplayFont"]) ? $Format["DisplayFont"] : $this->FontName;
+ $DisplaySize = isset($Format["DisplaySize"]) ? $Format["DisplaySize"] : $this->FontSize;
+ $DisplayR = isset($Format["DisplayR"]) ? $Format["DisplayR"] : 0;
+ $DisplayG = isset($Format["DisplayG"]) ? $Format["DisplayG"] : 0;
+ $DisplayB = isset($Format["DisplayB"]) ? $Format["DisplayB"] : 0;
+ $Surrounding = isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL;
+ $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : -1;
+ $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : -1;
+ $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : -1;
+ $ForceTransparency = isset($Format["ForceTransparency"]) ? $Format["ForceTransparency"] : NULL;
+
+ $Data = $this->DataSet->getData();
+ list($XMargin,$XDivs) = $this->scaleGetXSettings();
+
+ $RestoreShadow = $this->Shadow;
+
+ /* Determine if we only have positive or negatives values */
+ $Sign["+"] = 0; $Sign["-"] = 0;
+ foreach($Data["Series"] as $SerieName => $Serie)
+ {
+ if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
+ { foreach($Serie["Data"] as $Key => $Value) { if ($Value > 0) { $Sign["+"]++; } elseif ($Value < 0) { $Sign["-"]++; } } }
+ }
+ if ( $Sign["+"] == 0 || $Sign["-"] == 0 ) { $SingleWay = TRUE; } else { $SingleWay = FALSE; }
+
+ $LastX = ""; $LastY = "";
+ foreach($Data["Series"] as $SerieName => $Serie)
+ {
+ if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
+ {
+ $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; $Alpha = $Serie["Color"]["Alpha"]; $Ticks = $Serie["Ticks"];
+
+ if ( $ForceTransparency != NULL ) { $Alpha = $ForceTransparency; }
+ if ( $DisplayColor == DISPLAY_AUTO ) { $DisplayR = 255; $DisplayG = 255; $DisplayB = 255; }
+ if ( $Surrounding != NULL )
+ { $BorderR = $R+$Surrounding; $BorderG = $G+$Surrounding; $BorderB = $B+$Surrounding; }
+ else
+ { $BorderR = $R; $BorderG = $G; $BorderB = $B; }
+
+ $AxisID = $Serie["Axis"];
+ $Mode = $Data["Axis"][$AxisID]["Display"];
+ $Format = $Data["Axis"][$AxisID]["Format"];
+ $Unit = $Data["Axis"][$AxisID]["Unit"];
+
+ $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"]),TRUE);
+ $YZero = $this->scaleComputeY(0,array("AxisID"=>$Serie["Axis"]));
+
+ $this->DataSet->Data["Series"][$SerieName]["XOffset"] = 0;
+
+ if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
+ {
+ if ( $YZero > $this->GraphAreaY2-1 ) { $YZero = $this->GraphAreaY2-1; }
+ if ( $YZero > $this->GraphAreaY2-1 ) { $YZero = $this->GraphAreaY2-1; }
+
+ $Color = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"BorderR"=>$BorderR,"BorderG"=>$BorderG,"BorderB"=>$BorderB,"SkipY"=>$YZero);
+
+ if ( $SingleWay ) { unset($Color["SkipY"]); }
+
+ if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; }
+ $X = $this->GraphAreaX1 + $XMargin;
+
+ if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
+
+ $PointsTop = ""; $PointsBottom = ""; $Labels = ""; $Pos = "+";
+ foreach($PosArray as $Key => $Height)
+ {
+ if ( !isset($LastY[$Key] ) ) { $LastY[$Key] = ""; }
+ if ( !isset($LastY[$Key][$Pos] ) ) { $LastY[$Key][$Pos] = $YZero; }
+
+ if ( $Height != VOID && $Serie["Data"][$Key] >= 0)
+ {
+ $Y1 = $LastY[$Key][$Pos];
+ $Y2 = $Y1 - $Height;
+
+ $PointsTop[] = $X; $PointsTop[] = $Y2;
+ $PointsBottom[] = $X; $PointsBottom[] = $Y1;
+
+ if ( $DisplayValues )
+ {
+ $BarHeight = abs($Y2-$Y1);
+
+ $Caption = $this->scaleFormat(round($Serie["Data"][$Key],$DisplayRound),$Mode,$Format,$Unit);
+ $TxtPos = $this->getTextBox(0,0,$DisplayFont,$DisplaySize,0,$Caption);
+ $TxtHeight = abs($TxtPos[2]["Y"] - $TxtPos[0]["Y"]);
+
+ if ( $BarHeight > $TxtHeight )
+ {
+ $XCenter = $X;
+ $YCenter = $Y1- $BarHeight / 2;
+
+ $Labels[] = array($XCenter,$YCenter,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>TEXT_ALIGN_MIDDLEMIDDLE,"FontSize"=>$DisplaySize,"FontName"=>$DisplayFont));
+ }
+ }
+
+ $LastY[$Key][$Pos] = $Y2;
+ }
+ else
+ { $PointsTop[] = $X; $PointsTop[] = $LastY[$Key][$Pos]; $PointsBottom[] = $X; $PointsBottom[] = $LastY[$Key][$Pos]; }
+
+ $X = $X + $XStep;
+ }
+ $Points = $PointsTop;
+ for($i=count($PointsBottom)-2;$i>=0;$i-=2) { $Points[] = $PointsBottom[$i]; $Points[] = $PointsBottom[$i+1]; }
+ $this->drawPolygon($Points,$Color);
+
+ /* Reset the X axis parser for the negative values pass */
+ $X = $this->GraphAreaX1 + $XMargin;
+
+ $PointsTop = ""; $PointsBottom = ""; $Pos = "-";
+ foreach($PosArray as $Key => $Height)
+ {
+ if ( !isset($LastY[$Key] ) ) { $LastY[$Key] = ""; }
+ if ( !isset($LastY[$Key][$Pos] ) ) { $LastY[$Key][$Pos] = $YZero; }
+
+ if ( $Height != VOID && $Serie["Data"][$Key] < 0)
+ {
+ $Y1 = $LastY[$Key][$Pos];
+ $Y2 = $Y1 - $Height;
+
+ $PointsTop[] = $X; $PointsTop[] = $Y2;
+ $PointsBottom[] = $X; $PointsBottom[] = $Y1;
+
+ if ( $DisplayValues )
+ {
+ $BarHeight = abs($Y2-$Y1);
+
+ $Caption = $this->scaleFormat(round($Serie["Data"][$Key],$DisplayRound),$Mode,$Format,$Unit);
+ $TxtPos = $this->getTextBox(0,0,$DisplayFont,$DisplaySize,0,$Caption);
+ $TxtHeight = abs($TxtPos[2]["Y"] - $TxtPos[0]["Y"]);
+
+ if ( $BarHeight > $TxtHeight )
+ {
+ $XCenter = $X;
+ $YCenter = $BarHeight / 2 + $Y1;
+
+ $Labels[] = array($XCenter,$YCenter,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>TEXT_ALIGN_MIDDLEMIDDLE,"FontSize"=>$DisplaySize,"FontName"=>$DisplayFont));
+ }
+ }
+
+ $LastY[$Key][$Pos] = $Y2;
+ }
+ else
+ { $PointsTop[] = $X; $PointsTop[] = $LastY[$Key][$Pos]; $PointsBottom[] = $X; $PointsBottom[] = $LastY[$Key][$Pos]; }
+
+ $X = $X + $XStep;
+ }
+ $Points = $PointsTop;
+ for($i=count($PointsBottom)-2;$i>=0;$i-=2) { $Points[] = $PointsBottom[$i]; $Points[] = $PointsBottom[$i+1]; }
+ $this->drawPolygon($Points,$Color);
+
+ if ( $DisplayValues ) { foreach($Labels as $Key => $Value) { $this->drawText($Value[0],$Value[1],$Value[2],$Value[3]);} }
+ }
+ else
+ {
+ if ( $YZero < $this->GraphAreaX1+1 ) { $YZero = $this->GraphAreaX1+1; }
+ if ( $YZero > $this->GraphAreaX2-1 ) { $YZero = $this->GraphAreaX2-1; }
+
+ $Color = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"BorderR"=>$BorderR,"BorderG"=>$BorderG,"BorderB"=>$BorderB,"SkipX"=>$YZero);
+
+ if ( $SingleWay ) { unset($Color["SkipX"]); }
+
+ if ( $XDivs == 0 ) { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; }
+ $Y = $this->GraphAreaY1 + $XMargin;
+
+ if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
+
+ $PointsTop = ""; $PointsBottom = ""; $Labels = ""; $Pos = "+";
+ foreach($PosArray as $Key => $Width)
+ {
+ if ( !isset($LastX[$Key] ) ) { $LastX[$Key] = ""; }
+ if ( !isset($LastX[$Key][$Pos] ) ) { $LastX[$Key][$Pos] = $YZero; }
+
+ if ( $Width != VOID && $Serie["Data"][$Key] >= 0)
+ {
+ $X1 = $LastX[$Key][$Pos];
+ $X2 = $X1 + $Width;
+
+ $PointsTop[] = $X1; $PointsTop[] = $Y;
+ $PointsBottom[] = $X2; $PointsBottom[] = $Y;
+
+ if ( $DisplayValues )
+ {
+ $BarWidth = abs($X2-$X1);
+
+ $Caption = $this->scaleFormat(round($Serie["Data"][$Key],$DisplayRound),$Mode,$Format,$Unit);
+ $TxtPos = $this->getTextBox(0,0,$DisplayFont,$DisplaySize,0,$Caption);
+ $TxtWidth = abs($TxtPos[1]["X"] - $TxtPos[0]["X"]);
+
+ if ( $BarWidth > $TxtWidth )
+ {
+ $XCenter = $X1 + $BarWidth / 2;
+ $YCenter = $Y;
+
+ $Labels[] = array($XCenter,$YCenter,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>TEXT_ALIGN_MIDDLEMIDDLE,"FontSize"=>$DisplaySize,"FontName"=>$DisplayFont));
+ }
+ }
+
+ $LastX[$Key][$Pos] = $X2;
+ }
+ else
+ { $PointsTop[] = $LastX[$Key][$Pos]; $PointsTop[] = $Y; $PointsBottom[] = $LastX[$Key][$Pos]; $PointsBottom[] = $Y; }
+
+ $Y = $Y + $YStep;
+ }
+ $Points = $PointsTop;
+ for($i=count($PointsBottom)-2;$i>=0;$i-=2) { $Points[] = $PointsBottom[$i]; $Points[] = $PointsBottom[$i+1]; }
+ $this->drawPolygon($Points,$Color);
+
+
+ /* Reset the X axis parser for the negative values pass */
+ $Y = $this->GraphAreaY1 + $XMargin;
+
+
+ $PointsTop = ""; $PointsBottom = ""; $Pos = "-";
+ foreach($PosArray as $Key => $Width)
+ {
+ if ( !isset($LastX[$Key] ) ) { $LastX[$Key] = ""; }
+ if ( !isset($LastX[$Key][$Pos] ) ) { $LastX[$Key][$Pos] = $YZero; }
+
+ if ( $Width != VOID && $Serie["Data"][$Key] < 0)
+ {
+ $X1 = $LastX[$Key][$Pos];
+ $X2 = $X1 + $Width;
+
+ $PointsTop[] = $X1; $PointsTop[] = $Y;
+ $PointsBottom[] = $X2; $PointsBottom[] = $Y;
+
+ if ( $DisplayValues )
+ {
+ $BarWidth = abs($X2-$X1);
+
+ $Caption = $this->scaleFormat(round($Serie["Data"][$Key],$DisplayRound),$Mode,$Format,$Unit);
+ $TxtPos = $this->getTextBox(0,0,$DisplayFont,$DisplaySize,0,$Caption);
+ $TxtWidth = abs($TxtPos[1]["X"] - $TxtPos[0]["X"]);
+
+ if ( $BarWidth > $TxtWidth )
+ {
+ $XCenter = $X1 - $BarWidth / 2;
+ $YCenter = $Y;
+
+ $Labels[] = array($XCenter,$YCenter,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>TEXT_ALIGN_MIDDLEMIDDLE,"FontSize"=>$DisplaySize,"FontName"=>$DisplayFont));
+ }
+ }
+
+ $LastX[$Key][$Pos] = $X2;
+ }
+ else
+ { $PointsTop[] = $LastX[$Key][$Pos]; $PointsTop[] = $Y; $PointsBottom[] = $LastX[$Key][$Pos]; $PointsBottom[] = $Y; }
+
+ $Y = $Y + $YStep;
+ }
+ $Points = $PointsTop;
+ for($i=count($PointsBottom)-2;$i>=0;$i-=2) { $Points[] = $PointsBottom[$i]; $Points[] = $PointsBottom[$i+1]; }
+ $this->drawPolygon($Points,$Color);
+
+ if ( $DisplayValues ) { foreach($Labels as $Key => $Value) { $this->drawText($Value[0],$Value[1],$Value[2],$Value[3]);} }
+ }
+ }
+ }
+ }
+
+ /* Returns a random color */
+ function getRandomColor($Alpha=100)
+ { return(array("R"=>rand(0,255),"G"=>rand(0,255),"B"=>rand(0,255),"Alpha"=>$Alpha)); }
+
+ /* Validate a palette */
+ function validatePalette($Colors,$Surrounding=NULL)
+ {
+ $Result = "";
+
+ if ( !is_array($Colors) ) { return($this->getRandomColor()); }
+
+ foreach($Colors as $Key => $Values)
+ {
+ if ( isset($Values["R"]) ) { $Result[$Key]["R"] = $Values["R"]; } else { $Result[$Key]["R"] = rand(0,255); }
+ if ( isset($Values["G"]) ) { $Result[$Key]["G"] = $Values["G"]; } else { $Result[$Key]["G"] = rand(0,255); }
+ if ( isset($Values["B"]) ) { $Result[$Key]["B"] = $Values["B"]; } else { $Result[$Key]["B"] = rand(0,255); }
+ if ( isset($Values["Alpha"]) ) { $Result[$Key]["Alpha"] = $Values["Alpha"]; } else { $Result[$Key]["Alpha"] = 100; }
+
+ if ( $Surrounding != NULL )
+ {
+ $Result[$Key]["BorderR"] = $Result[$Key]["R"] + $Surrounding;
+ $Result[$Key]["BorderG"] = $Result[$Key]["G"] + $Surrounding;
+ $Result[$Key]["BorderB"] = $Result[$Key]["B"] + $Surrounding;
+ }
+ else
+ {
+ if ( isset($Values["BorderR"]) ) { $Result[$Key]["BorderR"] = $Values["BorderR"]; } else { $Result[$Key]["BorderR"] = $Result[$Key]["R"]; }
+ if ( isset($Values["BorderG"]) ) { $Result[$Key]["BorderG"] = $Values["BorderG"]; } else { $Result[$Key]["BorderG"] = $Result[$Key]["G"]; }
+ if ( isset($Values["BorderB"]) ) { $Result[$Key]["BorderB"] = $Values["BorderB"]; } else { $Result[$Key]["BorderB"] = $Result[$Key]["B"]; }
+ if ( isset($Values["BorderAlpha"]) ) { $Result[$Key]["BorderAlpha"] = $Values["BorderAlpha"]; } else { $Result[$Key]["BorderAlpha"] = $Result[$Key]["Alpha"]; }
+ }
+ }
+
+ return($Result);
+ }
+
+ /* Draw the derivative chart associated to the data series */
+ function drawDerivative($Format=NULL)
+ {
+ $Offset = isset($Format["Offset"]) ? $Format["Offset"] : 10;
+ $SerieSpacing = isset($Format["SerieSpacing"]) ? $Format["SerieSpacing"] : 3;
+ $DerivativeHeight = isset($Format["DerivativeHeight"]) ? $Format["DerivativeHeight"] : 4;
+ $ShadedSlopeBox = isset($Format["ShadedSlopeBox"]) ? $Format["ShadedSlopeBox"] : FALSE;
+ $DrawBackground = isset($Format["DrawBackground"]) ? $Format["DrawBackground"] : TRUE;
+ $BackgroundR = isset($Format["BackgroundR"]) ? $Format["BackgroundR"] : 255;
+ $BackgroundG = isset($Format["BackgroundG"]) ? $Format["BackgroundG"] : 255;
+ $BackgroundB = isset($Format["BackgroundB"]) ? $Format["BackgroundB"] : 255;
+ $BackgroundAlpha = isset($Format["BackgroundAlpha"]) ? $Format["BackgroundAlpha"] : 20;
+ $DrawBorder = isset($Format["DrawBorder"]) ? $Format["DrawBorder"] : TRUE;
+ $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : 0;
+ $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : 0;
+ $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : 0;
+ $BorderAlpha = isset($Format["BorderAlpha"]) ? $Format["BorderAlpha"] : 100;
+ $Caption = isset($Format["Caption"]) ? $Format["Caption"] : TRUE;
+ $CaptionHeight = isset($Format["CaptionHeight"]) ? $Format["CaptionHeight"] : 10;
+ $CaptionWidth = isset($Format["CaptionWidth"]) ? $Format["CaptionWidth"] : 20;
+ $CaptionMargin = isset($Format["CaptionMargin"]) ? $Format["CaptionMargin"] : 4;
+ $CaptionLine = isset($Format["CaptionLine"]) ? $Format["CaptionLine"] : FALSE;
+ $CaptionBox = isset($Format["CaptionBox"]) ? $Format["CaptionBox"] : FALSE;
+ $CaptionBorderR = isset($Format["CaptionBorderR"]) ? $Format["CaptionBorderR"] : 0;
+ $CaptionBorderG = isset($Format["CaptionBorderG"]) ? $Format["CaptionBorderG"] : 0;
+ $CaptionBorderB = isset($Format["CaptionBorderB"]) ? $Format["CaptionBorderB"] : 0;
+ $CaptionFillR = isset($Format["CaptionFillR"]) ? $Format["CaptionFillR"] : 255;
+ $CaptionFillG = isset($Format["CaptionFillG"]) ? $Format["CaptionFillG"] : 255;
+ $CaptionFillB = isset($Format["CaptionFillB"]) ? $Format["CaptionFillB"] : 255;
+ $CaptionFillAlpha = isset($Format["CaptionFillAlpha"]) ? $Format["CaptionFillAlpha"] : 80;
+ $PositiveSlopeStartR = isset($Format["PositiveSlopeStartR"]) ? $Format["PositiveSlopeStartR"] : 184;
+ $PositiveSlopeStartG = isset($Format["PositiveSlopeStartG"]) ? $Format["PositiveSlopeStartG"] : 234;
+ $PositiveSlopeStartB = isset($Format["PositiveSlopeStartB"]) ? $Format["PositiveSlopeStartB"] : 88;
+ $PositiveSlopeEndR = isset($Format["PositiveSlopeStartR"]) ? $Format["PositiveSlopeStartR"] : 239;
+ $PositiveSlopeEndG = isset($Format["PositiveSlopeStartG"]) ? $Format["PositiveSlopeStartG"] : 31;
+ $PositiveSlopeEndB = isset($Format["PositiveSlopeStartB"]) ? $Format["PositiveSlopeStartB"] : 36;
+ $NegativeSlopeStartR = isset($Format["NegativeSlopeStartR"]) ? $Format["NegativeSlopeStartR"] : 184;
+ $NegativeSlopeStartG = isset($Format["NegativeSlopeStartG"]) ? $Format["NegativeSlopeStartG"] : 234;
+ $NegativeSlopeStartB = isset($Format["NegativeSlopeStartB"]) ? $Format["NegativeSlopeStartB"] : 88;
+ $NegativeSlopeEndR = isset($Format["NegativeSlopeStartR"]) ? $Format["NegativeSlopeStartR"] : 67;
+ $NegativeSlopeEndG = isset($Format["NegativeSlopeStartG"]) ? $Format["NegativeSlopeStartG"] : 124;
+ $NegativeSlopeEndB = isset($Format["NegativeSlopeStartB"]) ? $Format["NegativeSlopeStartB"] : 227;
+
+ $Data = $this->DataSet->getData();
+
+ list($XMargin,$XDivs) = $this->scaleGetXSettings();
+
+ if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
+ $YPos = $this->DataSet->Data["GraphArea"]["Y2"] + $Offset;
+ else
+ $XPos = $this->DataSet->Data["GraphArea"]["X2"] + $Offset;
+
+ foreach($Data["Series"] as $SerieName => $Serie)
+ {
+ if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
+ {
+ $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; $Alpha = $Serie["Color"]["Alpha"]; $Ticks = $Serie["Ticks"]; $Weight = $Serie["Weight"];
+
+ $AxisID = $Serie["Axis"];
+ $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"]));
+
+ if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
+ {
+ if ( $Caption )
+ {
+ if ( $CaptionLine )
+ {
+ $StartX = floor($this->GraphAreaX1-$CaptionWidth+$XMargin-$CaptionMargin);
+ $EndX = floor($this->GraphAreaX1-$CaptionMargin+$XMargin);
+
+ $CaptionSettings = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight);
+ if ( $CaptionBox ) { $this->drawFilledRectangle($StartX,$YPos,$EndX,$YPos+$CaptionHeight,array("R"=>$CaptionFillR,"G"=>$CaptionFillG,"B"=>$CaptionFillB,"BorderR"=>$CaptionBorderR,"BorderG"=>$CaptionBorderG,"BorderB"=>$CaptionBorderB,"Alpha"=>$CaptionFillAlpha)); }
+ $this->drawLine($StartX+2,$YPos+($CaptionHeight/2),$EndX-2,$YPos+($CaptionHeight/2),$CaptionSettings);
+ }
+ else
+ $this->drawFilledRectangle($this->GraphAreaX1-$CaptionWidth+$XMargin-$CaptionMargin,$YPos,$this->GraphAreaX1-$CaptionMargin+$XMargin,$YPos+$CaptionHeight,array("R"=>$R,"G"=>$G,"B"=>$B,"BorderR"=>$CaptionBorderR,"BorderG"=>$CaptionBorderG,"BorderB"=>$CaptionBorderB));
+ }
+
+ if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; }
+ $X = $this->GraphAreaX1 + $XMargin;
+
+ $TopY = $YPos + ($CaptionHeight/2) - ($DerivativeHeight/2);
+ $BottomY = $YPos + ($CaptionHeight/2) + ($DerivativeHeight/2);
+
+ $StartX = floor($this->GraphAreaX1+$XMargin);
+ $EndX = floor($this->GraphAreaX2-$XMargin);
+
+ if ( $DrawBackground ) { $this->drawFilledRectangle($StartX-1,$TopY-1,$EndX+1,$BottomY+1,array("R"=>$BackgroundR,"G"=>$BackgroundG,"B"=>$BackgroundB,"Alpha"=>$BackgroundAlpha)); }
+ if ( $DrawBorder ) { $this->drawRectangle($StartX-1,$TopY-1,$EndX+1,$BottomY+1,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha)); }
+
+ if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
+
+ $RestoreShadow = $this->Shadow;
+ $this->Shadow = FALSE;
+
+ /* Determine the Max slope index */
+ $LastX = NULL; $LastY = NULL; $MinSlope = 0; $MaxSlope = 1;
+ foreach($PosArray as $Key => $Y)
+ {
+ if ( $Y != VOID && $LastX != NULL )
+ { $Slope = ($LastY - $Y); if ( $Slope > $MaxSlope ) { $MaxSlope = $Slope; } if ( $Slope < $MinSlope ) { $MinSlope = $Slope; } }
+
+ if ( $Y == VOID )
+ { $LastX = NULL; $LastY = NULL; }
+ else
+ { $LastX = $X; $LastY = $Y; }
+ }
+
+ $LastX = NULL; $LastY = NULL; $LastColor = NULL;
+ foreach($PosArray as $Key => $Y)
+ {
+ if ( $Y != VOID && $LastY != NULL )
+ {
+ $Slope = ($LastY - $Y);
+
+ if ( $Slope >= 0 )
+ {
+ $SlopeIndex = (100 / $MaxSlope) * $Slope;
+ $R = (($PositiveSlopeEndR - $PositiveSlopeStartR)/100)*$SlopeIndex+$PositiveSlopeStartR;
+ $G = (($PositiveSlopeEndG - $PositiveSlopeStartG)/100)*$SlopeIndex+$PositiveSlopeStartG;
+ $B = (($PositiveSlopeEndB - $PositiveSlopeStartB)/100)*$SlopeIndex+$PositiveSlopeStartB;
+ }
+ elseif ( $Slope < 0 )
+ {
+ $SlopeIndex = (100 / abs($MinSlope)) * abs($Slope);
+ $R = (($NegativeSlopeEndR - $NegativeSlopeStartR)/100)*$SlopeIndex+$NegativeSlopeStartR;
+ $G = (($NegativeSlopeEndG - $NegativeSlopeStartG)/100)*$SlopeIndex+$NegativeSlopeStartG;
+ $B = (($NegativeSlopeEndB - $NegativeSlopeStartB)/100)*$SlopeIndex+$NegativeSlopeStartB;
+ }
+
+ $Color = array("R"=>$R,"G"=>$G,"B"=>$B);
+
+ if ( $ShadedSlopeBox && $LastColor != NULL ) // && $Slope != 0
+ {
+ $GradientSettings = array("StartR"=>$LastColor["R"],"StartG"=>$LastColor["G"],"StartB"=>$LastColor["B"],"EndR"=>$R,"EndG"=>$G,"EndB"=>$B);
+ $this->drawGradientArea($LastX,$TopY,$X,$BottomY,DIRECTION_HORIZONTAL,$GradientSettings);
+ }
+ elseif ( !$ShadedSlopeBox || $LastColor == NULL ) // || $Slope == 0
+ $this->drawFilledRectangle(floor($LastX),$TopY,floor($X),$BottomY,$Color);
+
+ $LastColor = $Color;
+ }
+
+ if ( $Y == VOID )
+ { $LastY = NULL; }
+ else
+ { $LastX = $X; $LastY = $Y; }
+
+ $X = $X + $XStep;
+ }
+
+ $YPos = $YPos + $CaptionHeight + $SerieSpacing;
+ }
+ else
+ {
+ if ( $Caption )
+ {
+ $StartY = floor($this->GraphAreaY1-$CaptionWidth+$XMargin-$CaptionMargin);
+ $EndY = floor($this->GraphAreaY1-$CaptionMargin+$XMargin);
+ if ( $CaptionLine )
+ {
+ $CaptionSettings = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight);
+ if ( $CaptionBox ) { $this->drawFilledRectangle($XPos,$StartY,$XPos+$CaptionHeight,$EndY,array("R"=>$CaptionFillR,"G"=>$CaptionFillG,"B"=>$CaptionFillB,"BorderR"=>$CaptionBorderR,"BorderG"=>$CaptionBorderG,"BorderB"=>$CaptionBorderB,"Alpha"=>$CaptionFillAlpha)); }
+ $this->drawLine($XPos+($CaptionHeight/2),$StartY+2,$XPos+($CaptionHeight/2),$EndY-2,$CaptionSettings);
+ }
+ else
+ $this->drawFilledRectangle($XPos,$StartY,$XPos+$CaptionHeight,$EndY,array("R"=>$R,"G"=>$G,"B"=>$B,"BorderR"=>$CaptionBorderR,"BorderG"=>$CaptionBorderG,"BorderB"=>$CaptionBorderB));
+ }
+
+
+ if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $XStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; }
+ $Y = $this->GraphAreaY1 + $XMargin;
+
+ $TopX = $XPos + ($CaptionHeight/2) - ($DerivativeHeight/2);
+ $BottomX = $XPos + ($CaptionHeight/2) + ($DerivativeHeight/2);
+
+ $StartY = floor($this->GraphAreaY1+$XMargin);
+ $EndY = floor($this->GraphAreaY2-$XMargin);
+
+ if ( $DrawBackground ) { $this->drawFilledRectangle($TopX-1,$StartY-1,$BottomX+1,$EndY+1,array("R"=>$BackgroundR,"G"=>$BackgroundG,"B"=>$BackgroundB,"Alpha"=>$BackgroundAlpha)); }
+ if ( $DrawBorder ) { $this->drawRectangle($TopX-1,$StartY-1,$BottomX+1,$EndY+1,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha)); }
+
+ if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
+
+ $RestoreShadow = $this->Shadow;
+ $this->Shadow = FALSE;
+
+ /* Determine the Max slope index */
+ $LastX = NULL; $LastY = NULL; $MinSlope = 0; $MaxSlope = 1;
+ foreach($PosArray as $Key => $X)
+ {
+ if ( $X != VOID && $LastX != NULL )
+ { $Slope = ($X - $LastX); if ( $Slope > $MaxSlope ) { $MaxSlope = $Slope; } if ( $Slope < $MinSlope ) { $MinSlope = $Slope; } }
+
+ if ( $X == VOID )
+ { $LastX = NULL; }
+ else
+ { $LastX = $X; }
+ }
+
+ $LastX = NULL; $LastY = NULL; $LastColor = NULL;
+ foreach($PosArray as $Key => $X)
+ {
+ if ( $X != VOID && $LastX != NULL )
+ {
+ $Slope = ($X - $LastX);
+
+ if ( $Slope >= 0 )
+ {
+ $SlopeIndex = (100 / $MaxSlope) * $Slope;
+ $R = (($PositiveSlopeEndR - $PositiveSlopeStartR)/100)*$SlopeIndex+$PositiveSlopeStartR;
+ $G = (($PositiveSlopeEndG - $PositiveSlopeStartG)/100)*$SlopeIndex+$PositiveSlopeStartG;
+ $B = (($PositiveSlopeEndB - $PositiveSlopeStartB)/100)*$SlopeIndex+$PositiveSlopeStartB;
+ }
+ elseif ( $Slope < 0 )
+ {
+ $SlopeIndex = (100 / abs($MinSlope)) * abs($Slope);
+ $R = (($NegativeSlopeEndR - $NegativeSlopeStartR)/100)*$SlopeIndex+$NegativeSlopeStartR;
+ $G = (($NegativeSlopeEndG - $NegativeSlopeStartG)/100)*$SlopeIndex+$NegativeSlopeStartG;
+ $B = (($NegativeSlopeEndB - $NegativeSlopeStartB)/100)*$SlopeIndex+$NegativeSlopeStartB;
+ }
+
+ $Color = array("R"=>$R,"G"=>$G,"B"=>$B);
+
+ if ( $ShadedSlopeBox && $LastColor != NULL )
+ {
+ $GradientSettings = array("StartR"=>$LastColor["R"],"StartG"=>$LastColor["G"],"StartB"=>$LastColor["B"],"EndR"=>$R,"EndG"=>$G,"EndB"=>$B);
+
+ $this->drawGradientArea($TopX,$LastY,$BottomX,$Y,DIRECTION_VERTICAL,$GradientSettings);
+ }
+ elseif ( !$ShadedSlopeBox || $LastColor == NULL )
+ $this->drawFilledRectangle($TopX,floor($LastY),$BottomX,floor($Y),$Color);
+
+ $LastColor = $Color;
+ }
+
+ if ( $X == VOID )
+ { $LastX = NULL; }
+ else
+ { $LastX = $X; $LastY = $Y; }
+
+ $Y = $Y + $XStep;
+ }
+
+ $XPos = $XPos + $CaptionHeight + $SerieSpacing;
+ }
+
+ $this->Shadow = $RestoreShadow;
+ }
+ }
+ }
+
+ /* Draw the line of best fit */
+ function drawBestFit($Format="")
+ {
+ $OverrideTicks = isset($Format["Ticks"]) ? $Format["Ticks"] : NULL;
+ $OverrideR = isset($Format["R"]) ? $Format["R"] : VOID;
+ $OverrideG = isset($Format["G"]) ? $Format["G"] : VOID;
+ $OverrideB = isset($Format["B"]) ? $Format["B"] : VOID;
+ $OverrideAlpha = isset($Format["Alpha"]) ? $Format["Alpha"] : VOID;
+
+ $Data = $this->DataSet->getData();
+ list($XMargin,$XDivs) = $this->scaleGetXSettings();
+
+ foreach($Data["Series"] as $SerieName => $Serie)
+ {
+ if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
+ {
+ if ( $OverrideR != VOID && $OverrideG != VOID && $OverrideB != VOID ) { $R = $OverrideR; $G = $OverrideG; $B = $OverrideB; } else { $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; }
+ if ( $OverrideTicks == NULL ) { $Ticks = $Serie["Ticks"]; } else { $Ticks = $OverrideTicks; }
+ if ( $OverrideAlpha == VOID ) { $Alpha = $Serie["Color"]["Alpha"]; } else { $Alpha = $OverrideAlpha; }
+
+ $Color = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks);
+
+ $AxisID = $Serie["Axis"];
+ $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"]));
+
+ if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
+ {
+ if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; }
+ $X = $this->GraphAreaX1 + $XMargin;
+
+ if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
+ $Sxy = 0; $Sx = 0; $Sy = 0; $Sxx = 0;
+ foreach($PosArray as $Key => $Y)
+ {
+ $Sxy = $Sxy + $X*$Y;
+ $Sx = $Sx + $X;
+ $Sy = $Sy + $Y;
+ $Sxx = $Sxx + $X*$X;
+
+ $X = $X + $XStep;
+ }
+ $n = count($PosArray);
+ $M = (($n*$Sxy)-($Sx*$Sy)) / (($n*$Sxx)-($Sx*$Sx));
+ $B = (($Sy)-($M*$Sx))/($n);
+
+ $X1 = $this->GraphAreaX1 + $XMargin;
+ $Y1 = $M * $X1 + $B;
+ $X2 = $this->GraphAreaX2 - $XMargin;
+ $Y2 = $M * $X2 + $B;
+
+ if ( $Y1 < $this->GraphAreaY1 ) { $X1 = $X1 + ($this->GraphAreaY1-$Y1); $Y1 = $this->GraphAreaY1; }
+ if ( $Y1 > $this->GraphAreaY2 ) { $X1 = $X1 + ($Y1-$this->GraphAreaY2); $Y1 = $this->GraphAreaY2; }
+ if ( $Y2 < $this->GraphAreaY1 ) { $X2 = $X2 - ($this->GraphAreaY1-$Y2); $Y2 = $this->GraphAreaY1; }
+ if ( $Y2 > $this->GraphAreaY2 ) { $X2 = $X2 - ($Y2-$this->GraphAreaY2); $Y2 = $this->GraphAreaY2; }
+
+ $this->drawLine($X1,$Y1,$X2,$Y2,$Color);
+ }
+ else
+ {
+ if ( $XDivs == 0 ) { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; }
+ $Y = $this->GraphAreaY1 + $XMargin;
+
+ if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
+ $Sxy = 0; $Sx = 0; $Sy = 0; $Sxx = 0;
+ foreach($PosArray as $Key => $X)
+ {
+ $Sxy = $Sxy + $X*$Y;
+ $Sx = $Sx + $Y;
+ $Sy = $Sy + $X;
+ $Sxx = $Sxx + $Y*$Y;
+
+ $Y = $Y + $YStep;
+ }
+ $n = count($PosArray);
+ $M = (($n*$Sxy)-($Sx*$Sy)) / (($n*$Sxx)-($Sx*$Sx));
+ $B = (($Sy)-($M*$Sx))/($n);
+
+ $Y1 = $this->GraphAreaY1 + $XMargin;
+ $X1 = $M * $Y1 + $B;
+ $Y2 = $this->GraphAreaY2 - $XMargin;
+ $X2 = $M * $Y2 + $B;
+
+ if ( $X1 < $this->GraphAreaX1 ) { $Y1 = $Y1 + ($this->GraphAreaX1-$X1); $X1 = $this->GraphAreaX1; }
+ if ( $X1 > $this->GraphAreaX2 ) { $Y1 = $Y1 + ($X1-$this->GraphAreaX2); $X1 = $this->GraphAreaX2; }
+ if ( $X2 < $this->GraphAreaX1 ) { $Y2 = $Y2 - ($this->GraphAreaY1-$X2); $X2 = $this->GraphAreaX1; }
+ if ( $X2 > $this->GraphAreaX2 ) { $Y2 = $Y2 - ($X2-$this->GraphAreaX2); $X2 = $this->GraphAreaX2; }
+
+ $this->drawLine($X1,$Y1,$X2,$Y2,$Color);
+ }
+ }
+ }
+ }
+
+ /* Write labels */
+ function writeLabel($SeriesName,$Indexes,$Format="")
+ {
+ $OverrideTitle = isset($Format["OverrideTitle"]) ? $Format["OverrideTitle"] : NULL;
+ $ForceLabels = isset($Format["ForceLabels"]) ? $Format["ForceLabels"] : NULL;
+ $DrawPoint = isset($Format["DrawPoint"]) ? $Format["DrawPoint"] : LABEL_POINT_BOX;
+ $DrawVerticalLine = isset($Format["DrawVerticalLine"]) ? $Format["DrawVerticalLine"] : FALSE;
+ $VerticalLineR = isset($Format["VerticalLineR"]) ? $Format["VerticalLineR"] : 0;
+ $VerticalLineG = isset($Format["VerticalLineG"]) ? $Format["VerticalLineG"] : 0;
+ $VerticalLineB = isset($Format["VerticalLineB"]) ? $Format["VerticalLineB"] : 0;
+ $VerticalLineAlpha = isset($Format["VerticalLineAlpha"]) ? $Format["VerticalLineAlpha"] : 40;
+ $VerticalLineTicks = isset($Format["VerticalLineTicks"]) ? $Format["VerticalLineTicks"] : 2;
+
+ $Data = $this->DataSet->getData();
+ list($XMargin,$XDivs) = $this->scaleGetXSettings();
+
+ if ( !is_array($Indexes) ) { $Index = $Indexes; $Indexes = ""; $Indexes[] = $Index; }
+ if ( !is_array($SeriesName) ) { $SerieName = $SeriesName; $SeriesName = ""; $SeriesName[] = $SerieName; }
+ if ( $ForceLabels != NULL && !is_array($ForceLabels) ) { $ForceLabel = $ForceLabels; $ForceLabels = ""; $ForceLabels[] = $ForceLabel; }
+
+ foreach ($Indexes as $Key => $Index)
+ {
+ $Series = "";
+
+ if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
+ {
+ if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; }
+ $X = $this->GraphAreaX1 + $XMargin + $Index * $XStep;
+
+ if ( $DrawVerticalLine ) { $this->drawLine($X,$this->GraphAreaY1+$Data["YMargin"],$X,$this->GraphAreaY2-$Data["YMargin"],array("R"=>$VerticalLineR,"G"=>$VerticalLineG,"B"=>$VerticalLineB,"Alpha"=>$VerticalLineAlpha,"Ticks"=>$VerticalLineTicks)); }
+
+ $MinY = $this->GraphAreaY2;
+ foreach ($SeriesName as $iKey => $SerieName)
+ {
+ if ( isset($Data["Series"][$SerieName]["Data"][$Index]) )
+ {
+ $AxisID = $Data["Series"][$SerieName]["Axis"];
+
+ if ( $OverrideTitle != NULL)
+ $Description = $OverrideTitle;
+ elseif ( count($SeriesName) == 1 )
+ {
+ if ( isset($Data["Abscissa"]) && isset($Data["Series"][$Data["Abscissa"]]["Data"][$Index]) )
+ $Description = $Data["Series"][$SerieName]["Description"]." - ".$Data["Series"][$Data["Abscissa"]]["Data"][$Index];
+ else
+ $Description = $Data["Series"][$SerieName]["Description"];
+ }
+ elseif ( isset($Data["Abscissa"]) && isset($Data["Series"][$Data["Abscissa"]]["Data"][$Index]) )
+ $Description = $Data["Series"][$Data["Abscissa"]]["Data"][$Index];
+
+ $AxisMode = $Data["Axis"][$AxisID]["Display"];
+ $AxisFormat = $Data["Axis"][$AxisID]["Format"];
+ $AxisUnit = $Data["Axis"][$AxisID]["Unit"];
+
+ $Serie = "";
+ $Serie["R"] = $Data["Series"][$SerieName]["Color"]["R"];
+ $Serie["G"] = $Data["Series"][$SerieName]["Color"]["G"];
+ $Serie["B"] = $Data["Series"][$SerieName]["Color"]["B"];
+ $Serie["Alpha"] = $Data["Series"][$SerieName]["Color"]["Alpha"];
+
+ if ( count($SeriesName) == 1 && isset($Data["Series"][$SerieName]["XOffset"]) )
+ $SerieOffset = $Data["Series"][$SerieName]["XOffset"];
+ else
+ $SerieOffset = 0;
+
+ $Value = $Data["Series"][$SerieName]["Data"][$Index];
+ if ( $ForceLabels != NULL )
+ $Caption = isset($ForceLabels[$Key]) ? $ForceLabels[$Key] : "Not set";
+ else
+ $Caption = $this->scaleFormat($Value,$AxisMode,$AxisFormat,$AxisUnit);
+
+ $X = floor($this->GraphAreaX1 + $XMargin + $Index * $XStep + $SerieOffset);
+ $Y = floor($this->scaleComputeY($Value,array("AxisID"=>$AxisID)));
+
+ if ($Y < $MinY) { $MinY = $Y; }
+
+ if ( $DrawPoint == LABEL_POINT_CIRCLE )
+ $this->drawFilledCircle($X,$Y,3,array("R"=>255,"G"=>255,"B"=>255,"BorderR"=>0,"BorderG"=>0,"BorderB"=>0));
+ elseif ( $DrawPoint == LABEL_POINT_BOX )
+ $this->drawFilledRectangle($X-2,$Y-2,$X+2,$Y+2,array("R"=>255,"G"=>255,"B"=>255,"BorderR"=>0,"BorderG"=>0,"BorderB"=>0));
+
+ $Series[] = array("Format"=>$Serie,"Caption"=>$Caption);
+ }
+ }
+ $this->drawLabelBox($X,$MinY-3,$Description,$Series,$Format);
+
+ }
+ else
+ {
+ if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $XStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; }
+ $Y = $this->GraphAreaY1 + $XMargin + $Index * $XStep;
+
+ if ( $DrawVerticalLine ) { $this->drawLine($this->GraphAreaX1+$Data["YMargin"],$Y,$this->GraphAreaX2-$Data["YMargin"],$Y,array("R"=>$VerticalLineR,"G"=>$VerticalLineG,"B"=>$VerticalLineB,"Alpha"=>$VerticalLineAlpha,"Ticks"=>$VerticalLineTicks)); }
+
+ $MinX = $this->GraphAreaX2;
+ foreach ($SeriesName as $Key => $SerieName)
+ {
+ if ( isset($Data["Series"][$SerieName]["Data"][$Index]) )
+ {
+ $AxisID = $Data["Series"][$SerieName]["Axis"];
+
+ if ( $OverrideTitle != NULL)
+ $Description = $OverrideTitle;
+ elseif ( count($SeriesName) == 1 )
+ {
+ if ( isset($Data["Abscissa"]) && isset($Data["Series"][$Data["Abscissa"]]["Data"][$Index]) )
+ $Description = $Data["Series"][$SerieName]["Description"]." - ".$Data["Series"][$Data["Abscissa"]]["Data"][$Index];
+ else
+ $Description = $Data["Series"][$SerieName]["Description"];
+ }
+ elseif ( isset($Data["Abscissa"]) && isset($Data["Series"][$Data["Abscissa"]]["Data"][$Index]) )
+ $Description = $Data["Series"][$Data["Abscissa"]]["Data"][$Index];
+
+ $AxisMode = $Data["Axis"][$AxisID]["Display"];
+ $AxisFormat = $Data["Axis"][$AxisID]["Format"];
+ $AxisUnit = $Data["Axis"][$AxisID]["Unit"];
+
+ $Serie = "";
+ if ( isset($Data["Extended"]["Palette"][$Index] ) )
+ {
+ $Serie["R"] = $Data["Extended"]["Palette"][$Index]["R"];
+ $Serie["G"] = $Data["Extended"]["Palette"][$Index]["G"];
+ $Serie["B"] = $Data["Extended"]["Palette"][$Index]["B"];
+ $Serie["Alpha"] = $Data["Extended"]["Palette"][$Index]["Alpha"];
+ }
+ else
+ {
+ $Serie["R"] = $Data["Series"][$SerieName]["Color"]["R"];
+ $Serie["G"] = $Data["Series"][$SerieName]["Color"]["G"];
+ $Serie["B"] = $Data["Series"][$SerieName]["Color"]["B"];
+ $Serie["Alpha"] = $Data["Series"][$SerieName]["Color"]["Alpha"];
+ }
+
+ if ( count($SeriesName) == 1 && isset($Data["Series"][$SerieName]["XOffset"]) )
+ $SerieOffset = $Data["Series"][$SerieName]["XOffset"];
+ else
+ $SerieOffset = 0;
+
+ $Value = $Data["Series"][$SerieName]["Data"][$Index];
+ if ( $ForceLabels != NULL )
+ $Caption = isset($ForceLabels[$Key]) ? $ForceLabels[$Key] : "Not set";
+ else
+ $Caption = $this->scaleFormat($Value,$AxisMode,$AxisFormat,$AxisUnit);
+
+ $X = floor($this->scaleComputeY($Value,array("AxisID"=>$AxisID)));
+ $Y = floor($this->GraphAreaY1 + $XMargin + $Index * $XStep + $SerieOffset);
+
+ if ($X < $MinX) { $MinX = $X; }
+
+ if ( $DrawPoint == LABEL_POINT_CIRCLE )
+ $this->drawFilledCircle($X,$Y,3,array("R"=>255,"G"=>255,"B"=>255,"BorderR"=>0,"BorderG"=>0,"BorderB"=>0));
+ elseif ( $DrawPoint == LABEL_POINT_BOX )
+ $this->drawFilledRectangle($X-2,$Y-2,$X+2,$Y+2,array("R"=>255,"G"=>255,"B"=>255,"BorderR"=>0,"BorderG"=>0,"BorderB"=>0));
+
+ $Series[] = array("Format"=>$Serie,"Caption"=>$Caption);
+ }
+ }
+ $this->drawLabelBox($MinX,$Y-3,$Description,$Series,$Format);
+
+ }
+ }
+ }
+
+ /* Draw a label box */
+ function drawLabelBox($X,$Y,$Title,$Captions,$Format="")
+ {
+ $NoTitle = isset($Format["NoTitle"]) ? $Format["NoTitle"] : NULL;
+ $BoxWidth = isset($Format["BoxWidth"]) ? $Format["BoxWidth"] : 50;
+ $DrawSerieColor = isset($Format["DrawSerieColor"]) ? $Format["DrawSerieColor"] : TRUE;
+ $SerieR = isset($Format["SerieR"]) ? $Format["SerieR"] : NULL;
+ $SerieG = isset($Format["SerieG"]) ? $Format["SerieG"] : NULL;
+ $SerieB = isset($Format["SerieB"]) ? $Format["SerieB"] : NULL;
+ $SerieAlpha = isset($Format["SerieAlpha"]) ? $Format["SerieAlpha"] : NULL;
+ $SerieBoxSize = isset($Format["SerieBoxSize"]) ? $Format["SerieBoxSize"] : 6;
+ $SerieBoxSpacing = isset($Format["SerieBoxSpacing"]) ? $Format["SerieBoxSpacing"] : 4;
+ $VerticalMargin = isset($Format["VerticalMargin"]) ? $Format["VerticalMargin"] : 10;
+ $HorizontalMargin = isset($Format["HorizontalMargin"]) ? $Format["HorizontalMargin"] : 8;
+ $R = isset($Format["R"]) ? $Format["R"] : $this->FontColorR;
+ $G = isset($Format["G"]) ? $Format["G"] : $this->FontColorG;
+ $B = isset($Format["B"]) ? $Format["B"] : $this->FontColorB;
+ $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : $this->FontColorA;
+ $FontName = isset($Format["FontName"]) ? $Format["FontName"] : $this->FontName;
+ $FontSize = isset($Format["FontSize"]) ? $Format["FontSize"] : $this->FontSize;
+ $TitleMode = isset($Format["TitleMode"]) ? $Format["TitleMode"] : LABEL_TITLE_NOBACKGROUND;
+ $TitleR = isset($Format["TitleR"]) ? $Format["TitleR"] : $R;
+ $TitleG = isset($Format["TitleG"]) ? $Format["TitleG"] : $G;
+ $TitleB = isset($Format["TitleB"]) ? $Format["TitleB"] : $B;
+ $TitleBackgroundR = isset($Format["TitleBackgroundR"]) ? $Format["TitleBackgroundR"] : 0;
+ $TitleBackgroundG = isset($Format["TitleBackgroundG"]) ? $Format["TitleBackgroundG"] : 0;
+ $TitleBackgroundB = isset($Format["TitleBackgroundB"]) ? $Format["TitleBackgroundB"] : 0;
+ $GradientStartR = isset($Format["GradientStartR"]) ? $Format["GradientStartR"] : 255;
+ $GradientStartG = isset($Format["GradientStartG"]) ? $Format["GradientStartG"] : 255;
+ $GradientStartB = isset($Format["GradientStartB"]) ? $Format["GradientStartB"] : 255;
+ $GradientEndR = isset($Format["GradientEndR"]) ? $Format["GradientEndR"] : 220;
+ $GradientEndG = isset($Format["GradientEndG"]) ? $Format["GradientEndG"] : 220;
+ $GradientEndB = isset($Format["GradientEndB"]) ? $Format["GradientEndB"] : 220;
+
+ if ( !$DrawSerieColor ) { $SerieBoxSize = 0; $SerieBoxSpacing = 0; }
+
+ $TxtPos = $this->getTextBox($X,$Y,$FontName,$FontSize,0,$Title);
+ $TitleWidth = ($TxtPos[1]["X"] - $TxtPos[0]["X"])+$VerticalMargin*2;
+ $TitleHeight = ($TxtPos[0]["Y"] - $TxtPos[2]["Y"]);
+
+ if ( $NoTitle ) { $TitleWidth = 0; $TitleHeight = 0; }
+
+ $CaptionWidth = 0; $CaptionHeight = -$HorizontalMargin;
+ foreach($Captions as $Key =>$Caption)
+ {
+ $TxtPos = $this->getTextBox($X,$Y,$FontName,$FontSize,0,$Caption["Caption"]);
+ $CaptionWidth = max($CaptionWidth,($TxtPos[1]["X"] - $TxtPos[0]["X"])+$VerticalMargin*2);
+ $CaptionHeight = $CaptionHeight + max(($TxtPos[0]["Y"] - $TxtPos[2]["Y"]),($SerieBoxSize+2)) + $HorizontalMargin;
+ }
+
+ if ( $CaptionHeight <= 5 ) { $CaptionHeight = $CaptionHeight + $HorizontalMargin/2; }
+
+ if ( $DrawSerieColor ) { $CaptionWidth = $CaptionWidth + $SerieBoxSize + $SerieBoxSpacing; }
+
+ $BoxWidth = max($BoxWidth,$TitleWidth,$CaptionWidth);
+
+ $XMin = $X - 5 - floor(($BoxWidth-10) / 2);
+ $XMax = $X + 5 + floor(($BoxWidth-10) / 2);
+
+ $RestoreShadow = $this->Shadow;
+ if ( $this->Shadow == TRUE )
+ {
+ $this->Shadow = FALSE;
+
+ $Poly = "";
+ $Poly[] = $X+$this->ShadowX; $Poly[] = $Y+$this->ShadowX;
+ $Poly[] = $X+5+$this->ShadowX; $Poly[] = $Y-5+$this->ShadowX;
+ $Poly[] = $XMax+$this->ShadowX; $Poly[] = $Y-5+$this->ShadowX;
+
+ if ( $NoTitle )
+ {
+ $Poly[] = $XMax+$this->ShadowX; $Poly[] = $Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*2+$this->ShadowX;
+ $Poly[] = $XMin+$this->ShadowX; $Poly[] = $Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*2+$this->ShadowX;
+ }
+ else
+ {
+ $Poly[] = $XMax+$this->ShadowX; $Poly[] = $Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*3+$this->ShadowX;
+ $Poly[] = $XMin+$this->ShadowX; $Poly[] = $Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*3+$this->ShadowX;
+ }
+
+ $Poly[] = $XMin+$this->ShadowX; $Poly[] = $Y-5+$this->ShadowX;
+ $Poly[] = $X-5+$this->ShadowX; $Poly[] = $Y-5+$this->ShadowX;
+ $this->drawPolygon($Poly,array("R"=>$this->ShadowR,"G"=>$this->ShadowG,"B"=>$this->ShadowB,"Alpha"=>$this->Shadowa));
+ }
+
+ /* Draw the background */
+ $GradientSettings = array("StartR"=>$GradientStartR,"StartG"=>$GradientStartG,"StartB"=>$GradientStartB,"EndR"=>$GradientEndR,"EndG"=>$GradientEndG,"EndB"=>$GradientEndB);
+ if ( $NoTitle )
+ $this->drawGradientArea($XMin,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*2,$XMax,$Y-6,DIRECTION_VERTICAL,$GradientSettings);
+ else
+ $this->drawGradientArea($XMin,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*3,$XMax,$Y-6,DIRECTION_VERTICAL,$GradientSettings);
+ $Poly = ""; $Poly[] = $X; $Poly[] = $Y; $Poly[] = $X-5; $Poly[] = $Y-5; $Poly[] = $X+5; $Poly[] = $Y-5;
+ $this->drawPolygon($Poly,array("R"=>$GradientEndR,"G"=>$GradientEndG,"B"=>$GradientEndB,"NoBorder"=>TRUE));
+
+ /* Outer border */
+ $OuterBorderColor = $this->allocateColor($this->Picture,100,100,100,100);
+ imageline($this->Picture,$XMin,$Y-5,$X-5,$Y-5,$OuterBorderColor);
+ imageline($this->Picture,$X,$Y,$X-5,$Y-5,$OuterBorderColor);
+ imageline($this->Picture,$X,$Y,$X+5,$Y-5,$OuterBorderColor);
+ imageline($this->Picture,$X+5,$Y-5,$XMax,$Y-5,$OuterBorderColor);
+ if ( $NoTitle )
+ {
+ imageline($this->Picture,$XMin,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*2,$XMin,$Y-5,$OuterBorderColor);
+ imageline($this->Picture,$XMax,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*2,$XMax,$Y-5,$OuterBorderColor);
+ imageline($this->Picture,$XMin,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*2,$XMax,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*2,$OuterBorderColor);
+ }
+ else
+ {
+ imageline($this->Picture,$XMin,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*3,$XMin,$Y-5,$OuterBorderColor);
+ imageline($this->Picture,$XMax,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*3,$XMax,$Y-5,$OuterBorderColor);
+ imageline($this->Picture,$XMin,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*3,$XMax,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*3,$OuterBorderColor);
+ }
+
+ /* Inner border */
+ $InnerBorderColor = $this->allocateColor($this->Picture,255,255,255,100);
+ imageline($this->Picture,$XMin+1,$Y-6,$X-5,$Y-6,$InnerBorderColor);
+ imageline($this->Picture,$X,$Y-1,$X-5,$Y-6,$InnerBorderColor);
+ imageline($this->Picture,$X,$Y-1,$X+5,$Y-6,$InnerBorderColor);
+ imageline($this->Picture,$X+5,$Y-6,$XMax-1,$Y-6,$InnerBorderColor);
+ if ( $NoTitle )
+ {
+ imageline($this->Picture,$XMin+1,$Y-4-$TitleHeight-$CaptionHeight-$HorizontalMargin*2,$XMin+1,$Y-6,$InnerBorderColor);
+ imageline($this->Picture,$XMax-1,$Y-4-$TitleHeight-$CaptionHeight-$HorizontalMargin*2,$XMax-1,$Y-6,$InnerBorderColor);
+ imageline($this->Picture,$XMin+1,$Y-4-$TitleHeight-$CaptionHeight-$HorizontalMargin*2,$XMax-1,$Y-4-$TitleHeight-$CaptionHeight-$HorizontalMargin*2,$InnerBorderColor);
+ }
+ else
+ {
+ imageline($this->Picture,$XMin+1,$Y-4-$TitleHeight-$CaptionHeight-$HorizontalMargin*3,$XMin+1,$Y-6,$InnerBorderColor);
+ imageline($this->Picture,$XMax-1,$Y-4-$TitleHeight-$CaptionHeight-$HorizontalMargin*3,$XMax-1,$Y-6,$InnerBorderColor);
+ imageline($this->Picture,$XMin+1,$Y-4-$TitleHeight-$CaptionHeight-$HorizontalMargin*3,$XMax-1,$Y-4-$TitleHeight-$CaptionHeight-$HorizontalMargin*3,$InnerBorderColor);
+ }
+
+ /* Draw the separator line */
+ if ( $TitleMode == LABEL_TITLE_NOBACKGROUND && !$NoTitle )
+ {
+ $YPos = $Y-7-$CaptionHeight-$HorizontalMargin-$HorizontalMargin/2;
+ $XMargin = $VerticalMargin / 2;
+ $this->drawLine($XMin+$XMargin,$YPos+1,$XMax-$XMargin,$YPos+1,array("R"=>$GradientEndR,"G"=>$GradientEndG,"B"=>$GradientEndB));
+ $this->drawLine($XMin+$XMargin,$YPos,$XMax-$XMargin,$YPos,array("R"=>$GradientStartR,"G"=>$GradientStartG,"B"=>$GradientStartB));
+ }
+ elseif ( $TitleMode == LABEL_TITLE_BACKGROUND )
+ {
+ $this->drawFilledRectangle($XMin,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*3,$XMax,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin+$HorizontalMargin/2,array("R"=>$TitleBackgroundR,"G"=>$TitleBackgroundG,"B"=>$TitleBackgroundB));
+ imageline($this->Picture,$XMin+1,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin+$HorizontalMargin/2+1,$XMax-1,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin+$HorizontalMargin/2+1,$InnerBorderColor);
+ }
+
+ /* Write the description */
+ if ( !$NoTitle )
+ $this->drawText($XMin+$VerticalMargin,$Y-7-$CaptionHeight-$HorizontalMargin*2,$Title,array("Align"=>TEXT_ALIGN_BOTTOMLEFT,"R"=>$TitleR,"G"=>$TitleG,"B"=>$TitleB));
+
+ /* Write the value */
+ $YPos = $Y-5-$HorizontalMargin; $XPos = $XMin+$VerticalMargin+$SerieBoxSize+$SerieBoxSpacing;
+ foreach($Captions as $Key => $Caption)
+ {
+ $CaptionTxt = $Caption["Caption"];
+ $TxtPos = $this->getTextBox($XPos,$YPos,$FontName,$FontSize,0,$CaptionTxt);
+ $CaptionHeight = ($TxtPos[0]["Y"] - $TxtPos[2]["Y"]);
+
+ /* Write the serie color if needed */
+ if ( $DrawSerieColor )
+ {
+ $BoxSettings = array("R"=>$Caption["Format"]["R"],"G"=>$Caption["Format"]["G"],"B"=>$Caption["Format"]["B"],"Alpha"=>$Caption["Format"]["Alpha"],"BorderR"=>0,"BorderG"=>0,"BorderB"=>0);
+ $this->drawFilledRectangle($XMin+$VerticalMargin,$YPos-$SerieBoxSize,$XMin+$VerticalMargin+$SerieBoxSize,$YPos,$BoxSettings);
+ }
+
+ $this->drawText($XPos,$YPos,$CaptionTxt,array("Align"=>TEXT_ALIGN_BOTTOMLEFT));
+
+ $YPos = $YPos - $CaptionHeight - $HorizontalMargin;
+ }
+
+ $this->Shadow = $RestoreShadow;
+ }
+
+ /* Draw a basic shape */
+ function drawShape($X,$Y,$Shape,$PlotSize,$PlotBorder,$BorderSize,$R,$G,$B,$Alpha,$BorderR,$BorderG,$BorderB,$BorderAlpha)
+ {
+ if ( $Shape == SERIE_SHAPE_FILLEDCIRCLE )
+ {
+ if ( $PlotBorder ) { $this->drawFilledCircle($X,$Y,$PlotSize+$BorderSize,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha)); }
+ $this->drawFilledCircle($X,$Y,$PlotSize,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
+ }
+ elseif ( $Shape == SERIE_SHAPE_FILLEDSQUARE )
+ {
+ if ( $PlotBorder ) { $this->drawFilledRectangle($X-$PlotSize-$BorderSize,$Y-$PlotSize-$BorderSize,$X+$PlotSize+$BorderSize,$Y+$PlotSize+$BorderSize,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha)); }
+ $this->drawFilledRectangle($X-$PlotSize,$Y-$PlotSize,$X+$PlotSize,$Y+$PlotSize,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
+ }
+ elseif ( $Shape == SERIE_SHAPE_FILLEDTRIANGLE )
+ {
+ if ( $PlotBorder )
+ {
+ $Pos = ""; $Pos[]=$X; $Pos[]=$Y-$PlotSize-$BorderSize; $Pos[]=$X-$PlotSize-$BorderSize; $Pos[]=$Y+$PlotSize+$BorderSize; $Pos[]=$X+$PlotSize+$BorderSize; $Pos[]=$Y+$PlotSize+$BorderSize;
+ $this->drawPolygon($Pos,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha));
+ }
+
+ $Pos = ""; $Pos[]=$X; $Pos[]=$Y-$PlotSize; $Pos[]=$X-$PlotSize; $Pos[]=$Y+$PlotSize; $Pos[]=$X+$PlotSize; $Pos[]=$Y+$PlotSize;
+ $this->drawPolygon($Pos,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
+ }
+ elseif ( $Shape == SERIE_SHAPE_TRIANGLE )
+ {
+ $this->drawLine($X,$Y-$PlotSize,$X-$PlotSize,$Y+$PlotSize,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
+ $this->drawLine($X-$PlotSize,$Y+$PlotSize,$X+$PlotSize,$Y+$PlotSize,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
+ $this->drawLine($X+$PlotSize,$Y+$PlotSize,$X,$Y-$PlotSize,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
+ }
+ elseif ( $Shape == SERIE_SHAPE_SQUARE )
+ $this->drawRectangle($X-$PlotSize,$Y-$PlotSize,$X+$PlotSize,$Y+$PlotSize,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
+ elseif ( $Shape == SERIE_SHAPE_CIRCLE )
+ $this->drawCircle($X,$Y,$PlotSize,$PlotSize,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
+ elseif ( $Shape == SERIE_SHAPE_DIAMOND )
+ {
+ $Pos = ""; $Pos[]=$X-$PlotSize; $Pos[]=$Y; $Pos[]=$X; $Pos[]=$Y-$PlotSize; $Pos[]=$X+$PlotSize; $Pos[]=$Y; $Pos[]=$X; $Pos[]=$Y+$PlotSize;
+ $this->drawPolygon($Pos,array("NoFill"=>TRUE,"BorderR"=>$R,"BorderG"=>$G,"BorderB"=>$B,"BorderAlpha"=>$Alpha));
+ }
+ elseif ( $Shape == SERIE_SHAPE_FILLEDDIAMOND )
+ {
+ if ( $PlotBorder )
+ {
+ $Pos = ""; $Pos[]=$X-$PlotSize-$BorderSize; $Pos[]=$Y; $Pos[]=$X; $Pos[]=$Y-$PlotSize-$BorderSize; $Pos[]=$X+$PlotSize+$BorderSize; $Pos[]=$Y; $Pos[]=$X; $Pos[]=$Y+$PlotSize+$BorderSize;
+ $this->drawPolygon($Pos,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha));
+ }
+
+ $Pos = ""; $Pos[]=$X-$PlotSize; $Pos[]=$Y; $Pos[]=$X; $Pos[]=$Y-$PlotSize; $Pos[]=$X+$PlotSize; $Pos[]=$Y; $Pos[]=$X; $Pos[]=$Y+$PlotSize;
+ $this->drawPolygon($Pos,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
+ }
+ }
+
+ function drawPolygonChart($Points,$Format="")
+ {
+ $R = isset($Format["R"]) ? $Format["R"] : 0;
+ $G = isset($Format["G"]) ? $Format["G"] : 0;
+ $B = isset($Format["B"]) ? $Format["B"] : 0;
+ $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
+ $NoFill = isset($Format["NoFill"]) ? $Format["NoFill"] : FALSE;
+ $NoBorder = isset($Format["NoBorder"]) ? $Format["NoBorder"] : FALSE;
+ $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : $R;
+ $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : $G;
+ $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : $B;
+ $BorderAlpha = isset($Format["BorderAlpha"]) ? $Format["BorderAlpha"] : $Alpha / 2;
+ $Surrounding = isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL;
+ $Threshold = isset($Format["Threshold"]) ? $Format["Threshold"] : NULL;
+
+ if ( $Surrounding != NULL ) { $BorderR = $R+$Surrounding; $BorderG = $G+$Surrounding; $BorderB = $B+$Surrounding; }
+
+ $RestoreShadow = $this->Shadow;
+ $this->Shadow = FALSE;
+
+ $AllIntegers = TRUE;
+ for($i=0;$i<=count($Points)-2;$i=$i+2)
+ { if ( $this->getFirstDecimal($Points[$i+1]) != 0 ) { $AllIntegers = FALSE; } }
+
+ /* Convert polygon to segments */
+ $Segments = "";
+ for($i=2;$i<=count($Points)-2;$i=$i+2)
+ { $Segments[] = array("X1"=>$Points[$i-2],"Y1"=>$Points[$i-1],"X2"=>$Points[$i],"Y2"=>$Points[$i+1]); }
+ $Segments[] = array("X1"=>$Points[$i-2],"Y1"=>$Points[$i-1],"X2"=>$Points[0],"Y2"=>$Points[1]);
+
+ /* Simplify straight lines */
+ $Result = ""; $inHorizon = FALSE; $LastX = VOID;
+ foreach($Segments as $Key => $Pos)
+ {
+ if ( $Pos["Y1"] != $Pos["Y2"] )
+ {
+ if ( $inHorizon ) { $inHorizon = FALSE; $Result[] = array("X1"=>$LastX,"Y1"=>$Pos["Y1"],"X2"=>$Pos["X1"],"Y2"=>$Pos["Y1"]); }
+
+ $Result[] = array("X1"=>$Pos["X1"],"Y1"=>$Pos["Y1"],"X2"=>$Pos["X2"],"Y2"=>$Pos["Y2"]);
+ }
+ else { if ( !$inHorizon ) { $inHorizon = TRUE; $LastX = $Pos["X1"];} }
+ }
+ $Segments = $Result;
+
+ /* Do we have something to draw */
+ if ( $Segments == "" ) { return(0); }
+
+ /* For segments debugging purpose */
+ //foreach($Segments as $Key => $Pos)
+ // echo $Pos["X1"].",".$Pos["Y1"].",".$Pos["X2"].",".$Pos["Y2"]."\r\n";
+
+ /* Find out the min & max Y boundaries */
+ $MinY = OUT_OF_SIGHT; $MaxY = OUT_OF_SIGHT;
+ foreach($Segments as $Key => $Coords)
+ {
+ if ( $MinY == OUT_OF_SIGHT || $MinY > min($Coords["Y1"],$Coords["Y2"]) ) { $MinY = min($Coords["Y1"],$Coords["Y2"]); }
+ if ( $MaxY == OUT_OF_SIGHT || $MaxY < max($Coords["Y1"],$Coords["Y2"]) ) { $MaxY = max($Coords["Y1"],$Coords["Y2"]); }
+ }
+
+ if ( $AllIntegers ) { $YStep = 1; } else { $YStep = .5; }
+
+ $MinY = floor($MinY); $MaxY = floor($MaxY);
+
+ /* Scan each Y lines */
+ $DefaultColor = $this->allocateColor($this->Picture,$R,$G,$B,$Alpha);
+ $DebugLine = 0; $DebugColor = $this->allocateColor($this->Picture,255,0,0,100);
+
+ $MinY = floor($MinY); $MaxY = floor($MaxY); $YStep = 1;
+
+ if ( !$NoFill )
+ {
+ //if ( $DebugLine ) { $MinY = $DebugLine; $MaxY = $DebugLine; }
+ for($Y=$MinY;$Y<=$MaxY;$Y=$Y+$YStep)
+ {
+ $Intersections = ""; $LastSlope = NULL; $RestoreLast = "-";
+ foreach($Segments as $Key => $Coords)
+ {
+ $X1 = $Coords["X1"]; $X2 = $Coords["X2"]; $Y1 = $Coords["Y1"]; $Y2 = $Coords["Y2"];
+
+ if ( min($Y1,$Y2) <= $Y && max($Y1,$Y2) >= $Y )
+ {
+ if ( $Y1 == $Y2 )
+ { $X = $X1; }
+ else
+ { $X = $X1 + ( ($Y-$Y1)*$X2 - ($Y-$Y1)*$X1 ) / ($Y2-$Y1); }
+
+ $X = floor($X);
+
+ if ( $X2 == $X1 )
+ { $Slope = "!"; }
+ else
+ {
+ $SlopeC = ($Y2 - $Y1) / ($X2 - $X1);
+ if( $SlopeC == 0 )
+ { $Slope = "="; }
+ elseif( $SlopeC > 0 )
+ { $Slope = "+"; }
+ elseif ( $SlopeC < 0 )
+ { $Slope = "-"; }
+ }
+
+ if ( !is_array($Intersections) )
+ { $Intersections[] = $X; }
+ elseif( !in_array($X,$Intersections) )
+ { $Intersections[] = $X; }
+ elseif( in_array($X,$Intersections) )
+ {
+ if ($Y == $DebugLine) { echo $Slope."/".$LastSlope."(".$X.") "; }
+
+ if ( $Slope == "=" && $LastSlope == "-" ) { $Intersections[] = $X; }
+ if ( $Slope != $LastSlope && $LastSlope != "!" && $LastSlope != "=" ) { $Intersections[] = $X; }
+ if ( $Slope != $LastSlope && $LastSlope == "!" && $Slope == "+" ) { $Intersections[] = $X; }
+ }
+
+ if ( is_array($Intersections) && in_array($X,$Intersections) && $LastSlope == "=" && ($Slope == "-" )) { $Intersections[] = $X; }
+
+ $LastSlope = $Slope;
+ }
+ }
+ if ( $RestoreLast != "-" ) { $Intersections[] = $RestoreLast; echo "@".$Y."\r\n"; }
+
+ if ( is_array($Intersections) )
+ {
+ sort($Intersections);
+
+ if ($Y == $DebugLine) { print_r($Intersections); }
+
+ /* Remove NULL plots */
+ $Result = "";
+ for($i=0;$i<=count($Intersections)-1;$i=$i+2)
+ {
+ if ( isset($Intersections[$i+1]) )
+ { if ( $Intersections[$i] != $Intersections[$i+1] ) { $Result[] = $Intersections[$i]; $Result[] = $Intersections[$i+1]; } }
+ }
+
+ if ( is_array($Result) )
+ {
+ $Intersections = $Result;
+
+ $LastX = OUT_OF_SIGHT;
+ foreach($Intersections as $Key => $X)
+ {
+ if ( $LastX == OUT_OF_SIGHT )
+ $LastX = $X;
+ elseif ( $LastX != OUT_OF_SIGHT )
+ {
+ if ( $this->getFirstDecimal($LastX) > 1 ) { $LastX++; }
+
+ $Color = $DefaultColor;
+ if ( $Threshold != NULL )
+ {
+ foreach($Threshold as $Key => $Parameters)
+ {
+ if ( $Y <= $Parameters["MinX"] && $Y >= $Parameters["MaxX"])
+ {
+ if ( isset($Parameters["R"]) ) { $R = $Parameters["R"]; } else { $R = 0; }
+ if ( isset($Parameters["G"]) ) { $G = $Parameters["G"]; } else { $G = 0; }
+ if ( isset($Parameters["B"]) ) { $B = $Parameters["B"]; } else { $B = 0; }
+ if ( isset($Parameters["Alpha"]) ) { $Alpha = $Parameters["Alpha"]; } else { $Alpha = 100; }
+ $Color = $this->allocateColor($this->Picture,$R,$G,$B,$Alpha);
+ }
+ }
+ }
+
+ imageline($this->Picture,$LastX,$Y,$X,$Y,$Color);
+
+ if ( $Y == $DebugLine) { imageline($this->Picture,$LastX,$Y,$X,$Y,$DebugColor); }
+
+ $LastX = OUT_OF_SIGHT;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ /* Draw the polygon border, if required */
+ if ( !$NoBorder)
+ {
+ foreach($Segments as $Key => $Coords)
+ $this->drawLine($Coords["X1"],$Coords["Y1"],$Coords["X2"],$Coords["Y2"],array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha,"Threshold"=>$Threshold));
+ }
+
+ $this->Shadow = $RestoreShadow;
+ }
+ }
+?> \ No newline at end of file
diff --git a/For Weekly Test/tricode/class/pImage.class.php b/For Weekly Test/tricode/class/pImage.class.php
new file mode 100644
index 0000000..4684e3c
--- /dev/null
+++ b/For Weekly Test/tricode/class/pImage.class.php
@@ -0,0 +1,343 @@
+<?php
+ /*
+ pDraw - pChart core class
+
+ Version : 2.1.2
+ Made by : Jean-Damien POGOLOTTI
+ Last Update : 03/08/11
+
+ This file can be distributed under the license you can find at :
+
+ http://www.pchart.net/license
+
+ You can find the whole class documentation on the pChart web site.
+ */
+
+ /* The GD extension is mandatory */
+ if (!extension_loaded('gd') && !extension_loaded('gd2'))
+ {
+ echo "GD extension must be loaded. \r\n";
+ exit();
+ }
+
+ define("IMAGE_MAP_STORAGE_FILE" , 680001);
+ define("IMAGE_MAP_STORAGE_SESSION" , 680002);
+
+ class pImage extends pDraw
+ {
+ /* Image settings, size, quality, .. */
+ var $XSize = NULL; // Width of the picture
+ var $YSize = NULL; // Height of the picture
+ var $Picture = NULL; // GD picture object
+ var $Antialias = TRUE; // Turn antialias on or off
+ var $AntialiasQuality = 0; // Quality of the antialiasing implementation (0-1)
+ var $Mask = ""; // Already drawn pixels mask (Filled circle implementation)
+ var $TransparentBackground = FALSE; // Just to know if we need to flush the alpha channels when rendering
+
+ /* Graph area settings */
+ var $GraphAreaX1 = NULL; // Graph area X origin
+ var $GraphAreaY1 = NULL; // Graph area Y origin
+ var $GraphAreaX2 = NULL; // Graph area bottom right X position
+ var $GraphAreaY2 = NULL; // Graph area bottom right Y position
+
+ /* Scale settings */
+ var $ScaleMinDivHeight = 20; // Minimum height for scame divs
+
+ /* Font properties */
+ var $FontName = "fonts/GeosansLight.ttf"; // Default font file
+ var $FontSize = 12; // Default font size
+ var $FontBox = NULL; // Return the bounding box of the last written string
+ var $FontColorR = 0; // Default color settings
+ var $FontColorG = 0; // Default color settings
+ var $FontColorB = 0; // Default color settings
+ var $FontColorA = 100; // Default transparency
+
+ /* Shadow properties */
+ var $Shadow = TRUE; // Turn shadows on or off
+ var $ShadowX = NULL; // X Offset of the shadow
+ var $ShadowY = NULL; // Y Offset of the shadow
+ var $ShadowR = NULL; // R component of the shadow
+ var $ShadowG = NULL; // G component of the shadow
+ var $ShadowB = NULL; // B component of the shadow
+ var $Shadowa = NULL; // Alpha level of the shadow
+
+ /* Image map */
+ var $ImageMap = NULL; // Aray containing the image map
+ var $ImageMapIndex = "pChart"; // Name of the session array
+ var $ImageMapStorageMode = NULL; // Save the current imagemap storage mode
+ var $ImageMapAutoDelete = TRUE; // Automatic deletion of the image map temp files
+
+ /* Data Set */
+ var $DataSet = NULL; // Attached dataset
+
+ /* Class constructor */
+ function pImage($XSize,$YSize,$DataSet=NULL,$TransparentBackground=FALSE)
+ {
+ $this->TransparentBackground = $TransparentBackground;
+
+ if ( $DataSet != NULL ) { $this->DataSet = $DataSet; }
+
+ $this->XSize = $XSize;
+ $this->YSize = $YSize;
+ $this->Picture = imagecreatetruecolor($XSize,$YSize);
+
+ if ( $this->TransparentBackground )
+ {
+ imagealphablending($this->Picture,FALSE);
+ imagefilledrectangle($this->Picture, 0,0,$XSize, $YSize, imagecolorallocatealpha($this->Picture, 255, 255, 255, 127));
+ imagealphablending($this->Picture,TRUE);
+ imagesavealpha($this->Picture,true);
+ }
+ else
+ {
+ $C_White = $this->AllocateColor($this->Picture,255,255,255);
+ imagefilledrectangle($this->Picture,0,0,$XSize,$YSize,$C_White);
+ }
+ }
+
+ /* Enable / Disable and set shadow properties */
+ function setShadow($Enabled=TRUE,$Format="")
+ {
+ $X = isset($Format["X"]) ? $Format["X"] : 2;
+ $Y = isset($Format["Y"]) ? $Format["Y"] : 2;
+ $R = isset($Format["R"]) ? $Format["R"] : 0;
+ $G = isset($Format["G"]) ? $Format["G"] : 0;
+ $B = isset($Format["B"]) ? $Format["B"] : 0;
+ $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 10;
+
+ $this->Shadow = $Enabled;
+ $this->ShadowX = $X;
+ $this->ShadowY = $Y;
+ $this->ShadowR = $R;
+ $this->ShadowG = $G;
+ $this->ShadowB = $B;
+ $this->Shadowa = $Alpha;
+ }
+
+ /* Set the graph area position */
+ function setGraphArea($X1,$Y1,$X2,$Y2)
+ {
+ if ( $X2 < $X1 || $X1 == $X2 || $Y2 < $Y1 || $Y1 == $Y2 ) { return(-1); }
+
+ $this->GraphAreaX1 = $X1; $this->DataSet->Data["GraphArea"]["X1"] = $X1;
+ $this->GraphAreaY1 = $Y1; $this->DataSet->Data["GraphArea"]["Y1"] = $Y1;
+ $this->GraphAreaX2 = $X2; $this->DataSet->Data["GraphArea"]["X2"] = $X2;
+ $this->GraphAreaY2 = $Y2; $this->DataSet->Data["GraphArea"]["Y2"] = $Y2;
+ }
+
+ /* Return the width of the picture */
+ function getWidth()
+ { return($this->XSize); }
+
+ /* Return the heigth of the picture */
+ function getHeight()
+ { return($this->YSize); }
+
+ /* Render the picture to a file */
+ function render($FileName)
+ {
+ if ( $this->TransparentBackground ) { imagealphablending($this->Picture,false); imagesavealpha($this->Picture,true); }
+ imagepng($this->Picture,$FileName);
+ }
+
+ /* Render the picture to a web browser stream */
+ function stroke($BrowserExpire=FALSE)
+ {
+ if ( $this->TransparentBackground ) { imagealphablending($this->Picture,false); imagesavealpha($this->Picture,true); }
+
+ if ( $BrowserExpire )
+ {
+ header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
+ header("Cache-Control: no-cache");
+ header("Pragma: no-cache");
+ }
+
+ header('Content-type: image/png');
+ imagepng($this->Picture);
+ }
+
+ /* Automatic output method based on the calling interface */
+ function autoOutput($FileName="output.png")
+ {
+ if (php_sapi_name() == "cli")
+ $this->Render($FileName);
+ else
+ $this->Stroke();
+ }
+
+ /* Return the length between two points */
+ function getLength($X1,$Y1,$X2,$Y2)
+ { return(sqrt(pow(max($X1,$X2)-min($X1,$X2),2)+pow(max($Y1,$Y2)-min($Y1,$Y2),2))); }
+
+ /* Return the orientation of a line */
+ function getAngle($X1,$Y1,$X2,$Y2)
+ {
+ $Opposite = $Y2 - $Y1; $Adjacent = $X2 - $X1;$Angle = rad2deg(atan2($Opposite,$Adjacent));
+ if ($Angle > 0) { return($Angle); } else { return(360-abs($Angle)); }
+ }
+
+ /* Return the surrounding box of text area */
+ function getTextBox_deprecated($X,$Y,$FontName,$FontSize,$Angle,$Text)
+ {
+ $Size = imagettfbbox($FontSize,$Angle,$FontName,$Text);
+ $Width = $this->getLength($Size[0],$Size[1],$Size[2],$Size[3])+1;
+ $Height = $this->getLength($Size[2],$Size[3],$Size[4],$Size[5])+1;
+
+ $RealPos[0]["X"] = $X; $RealPos[0]["Y"] = $Y;
+ $RealPos[1]["X"] = cos((360-$Angle)*PI/180)*$Width + $RealPos[0]["X"]; $RealPos[1]["Y"] = sin((360-$Angle)*PI/180)*$Width + $RealPos[0]["Y"];
+ $RealPos[2]["X"] = cos((270-$Angle)*PI/180)*$Height + $RealPos[1]["X"]; $RealPos[2]["Y"] = sin((270-$Angle)*PI/180)*$Height + $RealPos[1]["Y"];
+ $RealPos[3]["X"] = cos((180-$Angle)*PI/180)*$Width + $RealPos[2]["X"]; $RealPos[3]["Y"] = sin((180-$Angle)*PI/180)*$Width + $RealPos[2]["Y"];
+
+ $RealPos[TEXT_ALIGN_BOTTOMLEFT]["X"] = $RealPos[0]["X"]; $RealPos[TEXT_ALIGN_BOTTOMLEFT]["Y"] = $RealPos[0]["Y"];
+ $RealPos[TEXT_ALIGN_BOTTOMRIGHT]["X"] = $RealPos[1]["X"]; $RealPos[TEXT_ALIGN_BOTTOMRIGHT]["Y"] = $RealPos[1]["Y"];
+
+ return($RealPos);
+ }
+
+ /* Return the surrounding box of text area */
+ function getTextBox($X,$Y,$FontName,$FontSize,$Angle,$Text)
+ {
+ $coords = imagettfbbox($FontSize, 0, $FontName, $Text);
+
+ $a = deg2rad($Angle); $ca = cos($a); $sa = sin($a); $RealPos = array();
+ for($i = 0; $i < 7; $i += 2)
+ {
+ $RealPos[$i/2]["X"] = $X + round($coords[$i] * $ca + $coords[$i+1] * $sa);
+ $RealPos[$i/2]["Y"] = $Y + round($coords[$i+1] * $ca - $coords[$i] * $sa);
+ }
+
+ $RealPos[TEXT_ALIGN_BOTTOMLEFT]["X"] = $RealPos[0]["X"]; $RealPos[TEXT_ALIGN_BOTTOMLEFT]["Y"] = $RealPos[0]["Y"];
+ $RealPos[TEXT_ALIGN_BOTTOMRIGHT]["X"] = $RealPos[1]["X"]; $RealPos[TEXT_ALIGN_BOTTOMRIGHT]["Y"] = $RealPos[1]["Y"];
+ $RealPos[TEXT_ALIGN_TOPLEFT]["X"] = $RealPos[3]["X"]; $RealPos[TEXT_ALIGN_TOPLEFT]["Y"] = $RealPos[3]["Y"];
+ $RealPos[TEXT_ALIGN_TOPRIGHT]["X"] = $RealPos[2]["X"]; $RealPos[TEXT_ALIGN_TOPRIGHT]["Y"] = $RealPos[2]["Y"];
+ $RealPos[TEXT_ALIGN_BOTTOMMIDDLE]["X"] = ($RealPos[1]["X"]-$RealPos[0]["X"])/2+$RealPos[0]["X"]; $RealPos[TEXT_ALIGN_BOTTOMMIDDLE]["Y"] = ($RealPos[0]["Y"]-$RealPos[1]["Y"])/2+$RealPos[1]["Y"];
+ $RealPos[TEXT_ALIGN_TOPMIDDLE]["X"] = ($RealPos[2]["X"]-$RealPos[3]["X"])/2+$RealPos[3]["X"]; $RealPos[TEXT_ALIGN_TOPMIDDLE]["Y"] = ($RealPos[3]["Y"]-$RealPos[2]["Y"])/2+$RealPos[2]["Y"];
+ $RealPos[TEXT_ALIGN_MIDDLELEFT]["X"] = ($RealPos[0]["X"]-$RealPos[3]["X"])/2+$RealPos[3]["X"]; $RealPos[TEXT_ALIGN_MIDDLELEFT]["Y"] = ($RealPos[0]["Y"]-$RealPos[3]["Y"])/2+$RealPos[3]["Y"];
+ $RealPos[TEXT_ALIGN_MIDDLERIGHT]["X"] = ($RealPos[1]["X"]-$RealPos[2]["X"])/2+$RealPos[2]["X"]; $RealPos[TEXT_ALIGN_MIDDLERIGHT]["Y"] = ($RealPos[1]["Y"]-$RealPos[2]["Y"])/2+$RealPos[2]["Y"];
+ $RealPos[TEXT_ALIGN_MIDDLEMIDDLE]["X"] = ($RealPos[1]["X"]-$RealPos[3]["X"])/2+$RealPos[3]["X"]; $RealPos[TEXT_ALIGN_MIDDLEMIDDLE]["Y"] = ($RealPos[0]["Y"]-$RealPos[2]["Y"])/2+$RealPos[2]["Y"];
+
+ return($RealPos);
+ }
+
+ /* Set current font properties */
+ function setFontProperties($Format="")
+ {
+ $R = isset($Format["R"]) ? $Format["R"] : -1;
+ $G = isset($Format["G"]) ? $Format["G"] : -1;
+ $B = isset($Format["B"]) ? $Format["B"] : -1;
+ $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
+ $FontName = isset($Format["FontName"]) ? $Format["FontName"] : NULL;
+ $FontSize = isset($Format["FontSize"]) ? $Format["FontSize"] : NULL;
+
+ if ( $R != -1) { $this->FontColorR = $R; }
+ if ( $G != -1) { $this->FontColorG = $G; }
+ if ( $B != -1) { $this->FontColorB = $B; }
+ if ( $Alpha != NULL) { $this->FontColorA = $Alpha; }
+
+ if ( $FontName != NULL )
+ $this->FontName = $FontName;
+
+ if ( $FontSize != NULL )
+ $this->FontSize = $FontSize;
+ }
+
+ /* Returns the 1st decimal values (used to correct AA bugs) */
+ function getFirstDecimal($Value)
+ {
+ $Values = preg_split("/\./",$Value);
+ if ( isset($Values[1]) ) { return(substr($Values[1],0,1)); } else { return(0); }
+ }
+
+ /* Attach a dataset to your pChart Object */
+ function setDataSet(&$DataSet)
+ { $this->DataSet = $DataSet; }
+
+ /* Print attached dataset contents to STDOUT */
+ function printDataSet()
+ { print_r($this->DataSet); }
+
+ /* Initialise the image map methods */
+ function initialiseImageMap($Name="pChart",$StorageMode=IMAGE_MAP_STORAGE_SESSION,$UniqueID="imageMap",$StorageFolder="tmp")
+ {
+ $this->ImageMapIndex = $Name;
+ $this->ImageMapStorageMode = $StorageMode;
+
+ if ($StorageMode == IMAGE_MAP_STORAGE_SESSION)
+ {
+ if(!isset($_SESSION)) { session_start(); }
+ $_SESSION[$this->ImageMapIndex] = NULL;
+ }
+ elseif($StorageMode == IMAGE_MAP_STORAGE_FILE)
+ {
+ $this->ImageMapFileName = $UniqueID;
+ $this->ImageMapStorageFolder = $StorageFolder;
+
+ if (file_exists($StorageFolder."/".$UniqueID.".map")) { unlink($StorageFolder."/".$UniqueID.".map"); }
+ }
+ }
+
+ /* Add a zone to the image map */
+ function addToImageMap($Type,$Plots,$Color=NULL,$Title=NULL,$Message=NULL)
+ {
+ if ( $this->ImageMapStorageMode == NULL ) { $this->initialiseImageMap(); }
+
+ if ( $this->ImageMapStorageMode == IMAGE_MAP_STORAGE_SESSION )
+ {
+ if(!isset($_SESSION)) { $this->initialiseImageMap(); }
+ $_SESSION[$this->ImageMapIndex][] = array($Type,$Plots,$Color,$Title,$Message);
+ }
+ elseif($this->ImageMapStorageMode == IMAGE_MAP_STORAGE_FILE)
+ {
+ $Handle = fopen($this->ImageMapStorageFolder."/".$this->ImageMapFileName.".map", 'a');
+ fwrite($Handle, $Type.";".$Plots.";".$Color.";".$Title.";".$Message."\r\n");
+ fclose($Handle);
+ }
+ }
+
+ /* Dump the image map */
+ function dumpImageMap($Name="pChart",$StorageMode=IMAGE_MAP_STORAGE_SESSION,$UniqueID="imageMap",$StorageFolder="tmp")
+ {
+ $this->ImageMapIndex = $Name;
+ $this->ImageMapStorageMode = $StorageMode;
+
+ if ( $this->ImageMapStorageMode == IMAGE_MAP_STORAGE_SESSION )
+ {
+ if(!isset($_SESSION)) { session_start(); }
+ if ( $_SESSION[$Name] != NULL )
+ {
+ foreach($_SESSION[$Name] as $Key => $Params)
+ { echo $Params[0].";".$Params[1].";".$Params[2].";".$Params[3].";".$Params[4]."\r\n"; }
+ }
+ }
+ elseif( $this->ImageMapStorageMode == IMAGE_MAP_STORAGE_FILE )
+ {
+ if (file_exists($StorageFolder."/".$UniqueID.".map"))
+ {
+ $Handle = @fopen($StorageFolder."/".$UniqueID.".map", "r");
+ if ($Handle) { while (($Buffer = fgets($Handle, 4096)) !== false) { echo $Buffer; } }
+ fclose($Handle);
+
+ if ( $this->ImageMapAutoDelete ) { unlink($StorageFolder."/".$UniqueID.".map"); }
+ }
+ }
+ exit();
+ }
+
+ /* Return the HTML converted color from the RGB composite values */
+ function toHTMLColor($R,$G,$B)
+ {
+ $R=intval($R); $G=intval($G); $B=intval($B);
+ $R=dechex($R<0?0:($R>255?255:$R)); $G=dechex($G<0?0:($G>255?255:$G));$B=dechex($B<0?0:($B>255?255:$B));
+ $Color="#".(strlen($R) < 2?'0':'').$R; $Color.=(strlen($G) < 2?'0':'').$G; $Color.= (strlen($B) < 2?'0':'').$B;
+ return($Color);
+ }
+
+ /* Reverse an array of points */
+ function reversePlots($Plots)
+ {
+ $Result = "";
+ for($i=count($Plots)-2;$i>=0;$i=$i-2) { $Result[] = $Plots[$i]; $Result[] = $Plots[$i+1]; }
+ return($Result);
+ }
+ }
+?> \ No newline at end of file
diff --git a/For Weekly Test/tricode/class/pIndicator.class.php b/For Weekly Test/tricode/class/pIndicator.class.php
new file mode 100644
index 0000000..4f7f23b
--- /dev/null
+++ b/For Weekly Test/tricode/class/pIndicator.class.php
@@ -0,0 +1,241 @@
+<?php
+ /*
+ pIndicator - class to draw indicators
+
+ Version : 2.1.2
+ Made by : Jean-Damien POGOLOTTI
+ Last Update : 03/08/11
+
+ This file can be distributed under the license you can find at :
+
+ http://www.pchart.net/license
+
+ You can find the whole class documentation on the pChart web site.
+ */
+
+ define("INDICATOR_CAPTION_DEFAULT" , 700001);
+ define("INDICATOR_CAPTION_EXTENDED" , 700002);
+
+ define("INDICATOR_CAPTION_INSIDE" , 700011);
+ define("INDICATOR_CAPTION_BOTTOM" , 700012);
+
+ define("INDICATOR_VALUE_BUBBLE" , 700021);
+ define("INDICATOR_VALUE_LABEL" , 700022);
+
+ /* pIndicator class definition */
+ class pIndicator
+ {
+ var $pChartObject;
+
+ /* Class creator */
+ function pIndicator($pChartObject)
+ {
+ $this->pChartObject = $pChartObject;
+ }
+
+ /* Draw an indicator */
+ function draw($X,$Y,$Width,$Height,$Format="")
+ {
+ $Values = isset($Format["Values"]) ? $Format["Values"] : VOID;
+ $IndicatorSections = isset($Format["IndicatorSections"]) ? $Format["IndicatorSections"] : NULL;
+ $ValueDisplay = isset($Format["ValueDisplay"]) ? $Format["ValueDisplay"] : INDICATOR_VALUE_BUBBLE;
+ $SectionsMargin = isset($Format["SectionsMargin"]) ? $Format["SectionsMargin"] : 4;
+ $DrawLeftHead = isset($Format["DrawLeftHead"]) ? $Format["DrawLeftHead"] : TRUE;
+ $DrawRightHead = isset($Format["DrawRightHead"]) ? $Format["DrawRightHead"] : TRUE;
+ $HeadSize = isset($Format["HeadSize"]) ? $Format["HeadSize"] : floor($Height/4);
+ $TextPadding = isset($Format["TextPadding"]) ? $Format["TextPadding"] : 4;
+ $CaptionLayout = isset($Format["CaptionLayout"]) ? $Format["CaptionLayout"] : INDICATOR_CAPTION_EXTENDED;
+ $CaptionPosition = isset($Format["CaptionPosition"]) ? $Format["CaptionPosition"] : INDICATOR_CAPTION_INSIDE;
+ $CaptionColorFactor = isset($Format["CaptionColorFactor"]) ? $Format["CaptionColorFactor"] : NULL;
+ $CaptionR = isset($Format["CaptionR"]) ? $Format["CaptionR"] : 255;
+ $CaptionG = isset($Format["CaptionG"]) ? $Format["CaptionG"] : 255;
+ $CaptionB = isset($Format["CaptionB"]) ? $Format["CaptionB"] : 255;
+ $CaptionAlpha = isset($Format["CaptionAlpha"]) ? $Format["CaptionAlpha"] : 100;
+ $SubCaptionColorFactor = isset($Format["SubCaptionColorFactor"]) ? $Format["SubCaptionColorFactor"] : NULL;
+ $SubCaptionR = isset($Format["SubCaptionR"]) ? $Format["SubCaptionR"] : 50;
+ $SubCaptionG = isset($Format["SubCaptionG"]) ? $Format["SubCaptionG"] : 50;
+ $SubCaptionB = isset($Format["SubCaptionB"]) ? $Format["SubCaptionB"] : 50;
+ $SubCaptionAlpha = isset($Format["SubCaptionAlpha"]) ? $Format["SubCaptionAlpha"] : 100;
+ $ValueFontName = isset($Format["ValueFontName"]) ? $Format["ValueFontName"] : $this->pChartObject->FontName;
+ $ValueFontSize = isset($Format["ValueFontSize"]) ? $Format["ValueFontSize"] : $this->pChartObject->FontSize;
+ $CaptionFontName = isset($Format["CaptionFontName"]) ? $Format["CaptionFontName"] : $this->pChartObject->FontName;
+ $CaptionFontSize = isset($Format["CaptionFontSize"]) ? $Format["CaptionFontSize"] : $this->pChartObject->FontSize;
+ $Unit = isset($Format["Unit"]) ? $Format["Unit"] : "";
+
+ /* Convert the Values to display to an array if needed */
+ if ( !is_array($Values) ) { $Value = $Values; $Values = ""; $Values[] = $Value; }
+
+ /* No section, let's die */
+ if ( $IndicatorSections == NULL ) { return(0); }
+
+ /* Determine indicator visual configuration */
+ $OverallMin = $IndicatorSections[0]["End"]; $OverallMax = $IndicatorSections[0]["Start"];
+ foreach ($IndicatorSections as $Key => $Settings)
+ {
+ if ( $Settings["End"] > $OverallMax ) { $OverallMax = $Settings["End"]; }
+ if ( $Settings["Start"] < $OverallMin ) { $OverallMin = $Settings["Start"]; }
+ }
+ $RealWidth = $Width - (count($IndicatorSections)-1)*$SectionsMargin;
+ $XScale = $RealWidth / ($OverallMax-$OverallMin);
+
+ $X1 = $X; $ValuesPos = "";
+ foreach ($IndicatorSections as $Key => $Settings)
+ {
+ $Color = array("R"=>$Settings["R"],"G"=>$Settings["G"],"B"=>$Settings["B"]);
+ $Caption = $Settings["Caption"];
+ $SubCaption = $Settings["Start"]." - ".$Settings["End"];
+
+ $X2 = $X1 + ($Settings["End"] - $Settings["Start"]) * $XScale;
+
+ if ( $Key == 0 && $DrawLeftHead )
+ {
+ $Poly = ""; $Poly[] = $X1-1; $Poly[] = $Y; $Poly[] = $X1-1; $Poly[] = $Y+$Height; $Poly[] = $X1-1-$HeadSize; $Poly[] = $Y+($Height/2);
+ $this->pChartObject->drawPolygon($Poly,$Color);
+ $this->pChartObject->drawLine($X1-2,$Y,$X1-2-$HeadSize,$Y+($Height/2),$Color);
+ $this->pChartObject->drawLine($X1-2,$Y+$Height,$X1-2-$HeadSize,$Y+($Height/2),$Color);
+ }
+
+ /* Determine the position of the breaks */
+ $Break = "";
+ foreach($Values as $iKey => $Value)
+ {
+ if ( $Value >= $Settings["Start"] && $Value <= $Settings["End"] )
+ {
+ $XBreak = $X1 + ($Value - $Settings["Start"]) * $XScale;
+ $ValuesPos[$Value] = $XBreak;
+ $Break[] = floor($XBreak);
+ }
+ }
+
+ if ( $ValueDisplay == INDICATOR_VALUE_LABEL )
+ {
+ if ( $Break == "" )
+ $this->pChartObject->drawFilledRectangle($X1,$Y,$X2,$Y+$Height,$Color);
+ else
+ {
+ sort($Break);
+ $Poly = ""; $Poly[] = $X1; $Poly[] = $Y; $LastPointWritten = FALSE;
+ foreach($Break as $iKey => $Value)
+ {
+ if ( $Value-5 >= $X1 )
+ { $Poly[] = $Value-5; $Poly[] = $Y; }
+ elseif ($X1 - ($Value-5) > 0 )
+ {
+ $Offset = $X1 - ($Value-5);
+ $Poly = ""; $Poly[] = $X1; $Poly[] = $Y + $Offset;
+ }
+
+ $Poly[] = $Value; $Poly[] = $Y+5;
+
+ if ( $Value+5 <= $X2 )
+ { $Poly[] = $Value+5; $Poly[] = $Y; }
+ elseif (($Value+5) > $X2 )
+ {
+ $Offset = ($Value+5) - $X2;
+ $Poly[] = $X2; $Poly[] = $Y + $Offset;
+ $LastPointWritten = TRUE;
+ }
+
+ }
+ if ( !$LastPointWritten ) { $Poly[] = $X2; $Poly[] = $Y; }
+ $Poly[] = $X2; $Poly[] = $Y+$Height;
+ $Poly[] = $X1; $Poly[] = $Y+$Height;
+
+ $this->pChartObject->drawPolygon($Poly,$Color);
+ }
+ }
+ else
+ $this->pChartObject->drawFilledRectangle($X1,$Y,$X2,$Y+$Height,$Color);
+
+ if ( $Key == count($IndicatorSections)-1 && $DrawRightHead )
+ {
+ $Poly = ""; $Poly[] = $X2+1; $Poly[] = $Y; $Poly[] = $X2+1; $Poly[] = $Y+$Height; $Poly[] = $X2+1+$HeadSize; $Poly[] = $Y+($Height/2);
+ $this->pChartObject->drawPolygon($Poly,$Color);
+ $this->pChartObject->drawLine($X2+1,$Y,$X2+1+$HeadSize,$Y+($Height/2),$Color);
+ $this->pChartObject->drawLine($X2+1,$Y+$Height,$X2+1+$HeadSize,$Y+($Height/2),$Color);
+ }
+
+ if ( $CaptionPosition == INDICATOR_CAPTION_INSIDE )
+ {
+ $TxtPos = $this->pChartObject->getTextBox($X1,$Y+$Height+$TextPadding,$CaptionFontName,$CaptionFontSize,0,$Caption);
+ $YOffset = ($TxtPos[0]["Y"] - $TxtPos[2]["Y"]) + $TextPadding;
+
+ if ( $CaptionLayout == INDICATOR_CAPTION_EXTENDED )
+ {
+ $TxtPos = $this->pChartObject->getTextBox($X1,$Y+$Height+$TextPadding,$CaptionFontName,$CaptionFontSize,0,$SubCaption);
+ $YOffset = $YOffset + ($TxtPos[0]["Y"] - $TxtPos[2]["Y"]) + $TextPadding*2;
+ }
+
+ $XOffset = $TextPadding;
+ }
+ else
+ { $YOffset = 0; $XOffset = 0; }
+
+ if ( $CaptionColorFactor == NULL )
+ { $CaptionColor = array("Align"=>TEXT_ALIGN_TOPLEFT,"FontName"=>$CaptionFontName,"FontSize"=>$CaptionFontSize,"R"=>$CaptionR,"G"=>$CaptionG,"B"=>$CaptionB,"Alpha"=>$CaptionAlpha); }
+ else
+ { $CaptionColor = array("Align"=>TEXT_ALIGN_TOPLEFT,"FontName"=>$CaptionFontName,"FontSize"=>$CaptionFontSize,"R"=>$Settings["R"]+$CaptionColorFactor,"G"=>$Settings["G"]+$CaptionColorFactor,"B"=>$Settings["B"]+$CaptionColorFactor); }
+
+ if ( $SubCaptionColorFactor == NULL )
+ $SubCaptionColor = array("Align"=>TEXT_ALIGN_TOPLEFT,"FontName"=>$CaptionFontName,"FontSize"=>$CaptionFontSize,"R"=>$SubCaptionR,"G"=>$SubCaptionG,"B"=>$SubCaptionB,"Alpha"=>$SubCaptionAlpha);
+ else
+ $SubCaptionColor = array("Align"=>TEXT_ALIGN_TOPLEFT,"FontName"=>$CaptionFontName,"FontSize"=>$CaptionFontSize,"R"=>$Settings["R"]+$SubCaptionColorFactor,"G"=>$Settings["G"]+$SubCaptionColorFactor,"B"=>$Settings["B"]+$SubCaptionColorFactor);
+
+ $RestoreShadow = $this->pChartObject->Shadow;
+ $this->pChartObject->Shadow = FALSE;
+
+ if ( $CaptionLayout == INDICATOR_CAPTION_DEFAULT )
+ $this->pChartObject->drawText($X1,$Y+$Height+$TextPadding,$Caption,$CaptionColor);
+ elseif ( $CaptionLayout == INDICATOR_CAPTION_EXTENDED )
+ {
+ $TxtPos = $this->pChartObject->getTextBox($X1,$Y+$Height+$TextPadding,$CaptionFontName,$CaptionFontSize,0,$Caption);
+ $CaptionHeight = $TxtPos[0]["Y"] - $TxtPos[2]["Y"];
+
+ $this->pChartObject->drawText($X1+$XOffset,$Y+$Height-$YOffset+$TextPadding,$Caption,$CaptionColor);
+ $this->pChartObject->drawText($X1+$XOffset,$Y+$Height-$YOffset+$CaptionHeight+$TextPadding*2,$SubCaption,$SubCaptionColor);
+ }
+
+ $this->pChartObject->Shadow = $RestoreShadow;
+
+ $X1 = $X2 + $SectionsMargin;
+ }
+
+ $RestoreShadow = $this->pChartObject->Shadow;
+ $this->pChartObject->Shadow = FALSE;
+
+ foreach($Values as $Key => $Value)
+ {
+ if ( $Value >= $OverallMin && $Value <= $OverallMax )
+ {
+ foreach ($IndicatorSections as $Key => $Settings)
+ {
+ if ( $Value >= $Settings["Start"] && $Value <= $Settings["End"] )
+ {
+ $X1 = $ValuesPos[$Value]; //$X + $Key*$SectionsMargin + ($Value - $OverallMin) * $XScale;
+
+ if ( $ValueDisplay == INDICATOR_VALUE_BUBBLE )
+ {
+ $TxtPos = $this->pChartObject->getTextBox($X1,$Y,$ValueFontName,$ValueFontSize,0,$Value.$Unit);
+ $Radius = floor(($TxtPos[1]["X"] - $TxtPos[0]["X"] + $TextPadding*4)/2);
+
+ $this->pChartObject->drawFilledCircle($X1,$Y,$Radius+4,array("R"=>$Settings["R"]+20,"G"=>$Settings["G"]+20,"B"=>$Settings["B"]+20));
+ $this->pChartObject->drawFilledCircle($X1,$Y,$Radius,array("R"=>255,"G"=>255,"B"=>255));
+
+ $TextSettings = array("Align"=>TEXT_ALIGN_MIDDLEMIDDLE,"FontName"=>$ValueFontName,"FontSize"=>$ValueFontSize);
+ $this->pChartObject->drawText($X1-1,$Y-1,$Value.$Unit,$TextSettings);
+ }
+ elseif( $ValueDisplay == INDICATOR_VALUE_LABEL )
+ {
+ $Caption = "";
+ $Caption[] = array("Format"=>array("R"=>$Settings["R"],"G"=>$Settings["G"],"B"=>$Settings["B"],"Alpha"=>100),"Caption"=>$Value.$Unit);
+ $this->pChartObject->drawLabelBox(floor($X1),floor($Y)+2,"Value - ".$Settings["Caption"],$Caption);
+ }
+ }
+ $X1 = $X2 + $SectionsMargin;
+ }
+ }
+ }
+ $this->pChartObject->Shadow = $RestoreShadow;
+ }
+ }
+?> \ No newline at end of file
diff --git a/For Weekly Test/tricode/class/pPie.class.php b/For Weekly Test/tricode/class/pPie.class.php
new file mode 100644
index 0000000..8940b4d
--- /dev/null
+++ b/For Weekly Test/tricode/class/pPie.class.php
@@ -0,0 +1,1493 @@
+<?php
+ /*
+ pPie - class to draw pie charts
+
+ Version : 2.1.2
+ Made by : Jean-Damien POGOLOTTI
+ Last Update : 03/08/11
+
+ This file can be distributed under the license you can find at :
+
+ http://www.pchart.net/license
+
+ You can find the whole class documentation on the pChart web site.
+ */
+
+ /* Class return codes */
+ define("PIE_NO_ABSCISSA" , 140001);
+ define("PIE_NO_DATASERIE" , 140002);
+ define("PIE_SUMISNULL" , 140003);
+ define("PIE_RENDERED" , 140000);
+
+ define("PIE_LABEL_COLOR_AUTO" , 140010);
+ define("PIE_LABEL_COLOR_MANUAL", 140011);
+
+ define("PIE_VALUE_NATURAL" , 140020);
+ define("PIE_VALUE_PERCENTAGE" , 140021);
+
+ define("PIE_VALUE_INSIDE" , 140030);
+ define("PIE_VALUE_OUTSIDE" , 140031);
+
+ /* pPie class definition */
+ class pPie
+ {
+ var $pChartObject;
+ var $pDataObject;
+ var $LabelPos = "" ;
+
+ /* Class creator */
+ function pPie($Object,$pDataObject)
+ {
+ /* Cache the pChart object reference */
+ $this->pChartObject = $Object;
+
+ /* Cache the pData object reference */
+ $this->pDataObject = $pDataObject;
+ }
+
+ /* Draw a pie chart */
+ function draw2DPie($X,$Y,$Format="")
+ {
+ $Radius = isset($Format["Radius"]) ? $Format["Radius"] : 60;
+ $DataGapAngle = isset($Format["DataGapAngle"]) ? $Format["DataGapAngle"] : 0;
+ $DataGapRadius = isset($Format["DataGapRadius"]) ? $Format["DataGapRadius"] : 0;
+ $SecondPass = isset($Format["SecondPass"]) ? $Format["SecondPass"] : TRUE;
+ $Border = isset($Format["Border"]) ? $Format["Border"] : FALSE;
+ $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : 255;
+ $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : 255;
+ $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : 255;
+ $Shadow = isset($Format["Shadow"]) ? $Format["Shadow"] : FALSE;
+ $DrawLabels = isset($Format["DrawLabels"]) ? $Format["DrawLabels"] : FALSE;
+ $LabelStacked = isset($Format["LabelStacked"]) ? $Format["LabelStacked"] : FALSE;
+ $LabelColor = isset($Format["LabelColor"]) ? $Format["LabelColor"] : PIE_LABEL_COLOR_MANUAL;
+ $LabelR = isset($Format["LabelR"]) ? $Format["LabelR"] : 0;
+ $LabelG = isset($Format["LabelG"]) ? $Format["LabelG"] : 0;
+ $LabelB = isset($Format["LabelB"]) ? $Format["LabelB"] : 0;
+ $LabelAlpha = isset($Format["LabelAlpha"]) ? $Format["LabelAlpha"] : 100;
+ $WriteValues = isset($Format["WriteValues"]) ? $Format["WriteValues"] : NULL;
+ $ValuePosition = isset($Format["ValuePosition"]) ? $Format["ValuePosition"] : PIE_VALUE_OUTSIDE;
+ $ValuePadding = isset($Format["ValuePadding"]) ? $Format["ValuePadding"] : 15;
+ $ValueSuffix = isset($Format["ValueSuffix"]) ? $Format["ValueSuffix"] : "";
+ $ValueR = isset($Format["ValueR"]) ? $Format["ValueR"] : 255;
+ $ValueG = isset($Format["ValueG"]) ? $Format["ValueG"] : 255;
+ $ValueB = isset($Format["ValueB"]) ? $Format["ValueB"] : 255;
+ $ValueAlpha = isset($Format["ValueAlpha"]) ? $Format["ValueAlpha"] : 100;
+ $RecordImageMap = isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE;
+
+ /* Data Processing */
+ $Data = $this->pDataObject->getData();
+ $Palette = $this->pDataObject->getPalette();
+
+ /* Do we have an abscissa serie defined? */
+ if ( $Data["Abscissa"] == "" ) { return(PIE_NO_ABSCISSA); }
+
+ /* Try to find the data serie */
+ $DataSerie = "";
+ foreach ($Data["Series"] as $SerieName => $SerieData)
+ { if ( $SerieName != $Data["Abscissa"]) { $DataSerie = $SerieName; } }
+
+ /* Do we have data to compute? */
+ if ( $DataSerie == "" ) { return(PIE_NO_DATASERIE); }
+
+ /* Remove unused data */
+ list($Data,$Palette) = $this->clean0Values($Data,$Palette,$DataSerie,$Data["Abscissa"]);
+
+ /* Compute the pie sum */
+ $SerieSum = $this->pDataObject->getSum($DataSerie);
+
+ /* Do we have data to draw? */
+ if ( $SerieSum == 0 ) { return(PIE_SUMISNULL); }
+
+ /* Dump the real number of data to draw */
+ $Values = "";
+ foreach ($Data["Series"][$DataSerie]["Data"] as $Key => $Value)
+ { if ($Value != 0) { $Values[] = $Value; } }
+
+ /* Compute the wasted angular space between series */
+ if (count($Values)==1) { $WastedAngular = 0; } else { $WastedAngular = count($Values) * $DataGapAngle; }
+
+ /* Compute the scale */
+ $ScaleFactor = (360 - $WastedAngular) / $SerieSum;
+
+ $RestoreShadow = $this->pChartObject->Shadow;
+ if ( $this->pChartObject->Shadow )
+ {
+ $this->pChartObject->Shadow = FALSE;
+
+ $ShadowFormat = $Format; $ShadowFormat["Shadow"] = TRUE;
+ $this->draw2DPie($X+$this->pChartObject->ShadowX,$Y+$this->pChartObject->ShadowY,$ShadowFormat);
+ }
+
+ /* Draw the polygon pie elements */
+ $Step = 360 / (2 * PI * $Radius);
+ $Offset = 0; $ID = 0;
+ foreach($Values as $Key => $Value)
+ {
+ if ( $Shadow )
+ $Settings = array("R"=>$this->pChartObject->ShadowR,"G"=>$this->pChartObject->ShadowG,"B"=>$this->pChartObject->ShadowB,"Alpha"=>$this->pChartObject->Shadowa);
+ else
+ {
+ if ( !isset($Palette[$ID]["R"]) ) { $Color = $this->pChartObject->getRandomColor(); $Palette[$ID] = $Color; $this->pDataObject->savePalette($ID,$Color); }
+ $Settings = array("R"=>$Palette[$ID]["R"],"G"=>$Palette[$ID]["G"],"B"=>$Palette[$ID]["B"],"Alpha"=>$Palette[$ID]["Alpha"]);
+ }
+
+ if ( !$SecondPass && !$Shadow )
+ {
+ if ( !$Border )
+ $Settings["Surrounding"] = 10;
+ else
+ { $Settings["BorderR"] = $BorderR; $Settings["BorderG"] = $BorderG; $Settings["BorderB"] = $BorderB; }
+ }
+
+ $Plots = "";
+ $EndAngle = $Offset+($Value*$ScaleFactor); if ( $EndAngle > 360 ) { $EndAngle = 360; }
+
+ $Angle = ($EndAngle - $Offset)/2 + $Offset;
+ if ($DataGapAngle == 0)
+ { $X0 = $X; $Y0 = $Y; }
+ else
+ {
+ $X0 = cos(($Angle-90)*PI/180) * $DataGapRadius + $X;
+ $Y0 = sin(($Angle-90)*PI/180) * $DataGapRadius + $Y;
+ }
+
+ $Plots[] = $X0; $Plots[] = $Y0;
+
+
+ for($i=$Offset;$i<=$EndAngle;$i=$i+$Step)
+ {
+ $Xc = cos(($i-90)*PI/180) * $Radius + $X;
+ $Yc = sin(($i-90)*PI/180) * $Radius + $Y;
+
+ if ( $SecondPass && ( $i<90 )) { $Yc++; }
+ if ( $SecondPass && ( $i>180 && $i<270 )) { $Xc++; }
+ if ( $SecondPass && ( $i>=270 )) { $Xc++; $Yc++; }
+
+ $Plots[] = $Xc; $Plots[] = $Yc;
+ }
+
+ $this->pChartObject->drawPolygon($Plots,$Settings);
+ if ( $RecordImageMap && !$Shadow ) { $this->pChartObject->addToImageMap("POLY",$this->arraySerialize($Plots),$this->pChartObject->toHTMLColor($Palette[$ID]["R"],$Palette[$ID]["G"],$Palette[$ID]["B"]),$Data["Series"][$Data["Abscissa"]]["Data"][$Key],$Value); }
+
+ if ( $DrawLabels && !$Shadow && !$SecondPass )
+ {
+ if ( $LabelColor == PIE_LABEL_COLOR_AUTO )
+ { $Settings = array("FillR"=>$Palette[$ID]["R"],"FillG"=>$Palette[$ID]["G"],"FillB"=>$Palette[$ID]["B"],"Alpha"=>$Palette[$ID]["Alpha"]);}
+ else
+ { $Settings = array("FillR"=>$LabelR,"FillG"=>$LabelG,"FillB"=>$LabelB,"Alpha"=>$LabelAlpha); }
+
+ $Angle = ($EndAngle - $Offset)/2 + $Offset;
+ $Xc = cos(($Angle-90)*PI/180) * $Radius + $X;
+ $Yc = sin(($Angle-90)*PI/180) * $Radius + $Y;
+
+ $Label = $Data["Series"][$Data["Abscissa"]]["Data"][$Key];
+
+ if ( $LabelStacked )
+ $this->writePieLabel($Xc,$Yc,$Label,$Angle,$Settings,TRUE,$X,$Y,$Radius);
+ else
+ $this->writePieLabel($Xc,$Yc,$Label,$Angle,$Settings,FALSE);
+ }
+
+ $Offset = $i + $DataGapAngle; $ID++;
+ }
+
+ /* Second pass to smooth the angles */
+ if ( $SecondPass )
+ {
+ $Step = 360 / (2 * PI * $Radius);
+ $Offset = 0; $ID = 0;
+ foreach($Values as $Key => $Value)
+ {
+ $FirstPoint = TRUE;
+ if ( $Shadow )
+ $Settings = array("R"=>$this->pChartObject->ShadowR,"G"=>$this->pChartObject->ShadowG,"B"=>$this->pChartObject->ShadowB,"Alpha"=>$this->pChartObject->Shadowa);
+ else
+ {
+ if ( $Border )
+ $Settings = array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB);
+ else
+ $Settings = array("R"=>$Palette[$ID]["R"],"G"=>$Palette[$ID]["G"],"B"=>$Palette[$ID]["B"],"Alpha"=>$Palette[$ID]["Alpha"]);
+ }
+
+ $EndAngle = $Offset+($Value*$ScaleFactor); if ( $EndAngle > 360 ) { $EndAngle = 360; }
+
+ if ($DataGapAngle == 0)
+ { $X0 = $X; $Y0 = $Y; }
+ else
+ {
+ $Angle = ($EndAngle - $Offset)/2 + $Offset;
+ $X0 = cos(($Angle-90)*PI/180) * $DataGapRadius + $X;
+ $Y0 = sin(($Angle-90)*PI/180) * $DataGapRadius + $Y;
+ }
+ $Plots[] = $X0; $Plots[] = $Y0;
+
+ for($i=$Offset;$i<=$EndAngle;$i=$i+$Step)
+ {
+ $Xc = cos(($i-90)*PI/180) * $Radius + $X;
+ $Yc = sin(($i-90)*PI/180) * $Radius + $Y;
+
+ if ( $FirstPoint ) { $this->pChartObject->drawLine($Xc,$Yc,$X0,$Y0,$Settings); } { $FirstPoint = FALSE; }
+
+ $this->pChartObject->drawAntialiasPixel($Xc,$Yc,$Settings);
+ }
+ $this->pChartObject->drawLine($Xc,$Yc,$X0,$Y0,$Settings);
+
+ if ( $DrawLabels && !$Shadow )
+ {
+ if ( $LabelColor == PIE_LABEL_COLOR_AUTO )
+ { $Settings = array("FillR"=>$Palette[$ID]["R"],"FillG"=>$Palette[$ID]["G"],"FillB"=>$Palette[$ID]["B"],"Alpha"=>$Palette[$ID]["Alpha"]);}
+ else
+ { $Settings = array("FillR"=>$LabelR,"FillG"=>$LabelG,"FillB"=>$LabelB,"Alpha"=>$LabelAlpha); }
+
+ $Angle = ($EndAngle - $Offset)/2 + $Offset;
+ $Xc = cos(($Angle-90)*PI/180) * $Radius + $X;
+ $Yc = sin(($Angle-90)*PI/180) * $Radius + $Y;
+
+ $Label = $Data["Series"][$Data["Abscissa"]]["Data"][$Key];
+
+ if ( $LabelStacked )
+ $this->writePieLabel($Xc,$Yc,$Label,$Angle,$Settings,TRUE,$X,$Y,$Radius);
+ else
+ $this->writePieLabel($Xc,$Yc,$Label,$Angle,$Settings,FALSE);
+ }
+
+ $Offset = $i + $DataGapAngle; $ID++;
+ }
+ }
+
+ if ( $WriteValues != NULL && !$Shadow )
+ {
+ $Step = 360 / (2 * PI * $Radius);
+ $Offset = 0; $ID = count($Values)-1;
+ $Settings = array("Align"=>TEXT_ALIGN_MIDDLEMIDDLE,"R"=>$ValueR,"G"=>$ValueG,"B"=>$ValueB,"Alpha"=>$ValueAlpha);
+ foreach($Values as $Key => $Value)
+ {
+ $EndAngle = ($Value*$ScaleFactor) + $Offset; if ( $EndAngle > 360 ) { $EndAngle = 0; }
+ $Angle = ($EndAngle - $Offset)/2 + $Offset;
+
+ if ( $ValuePosition == PIE_VALUE_OUTSIDE )
+ {
+ $Xc = cos(($Angle-90)*PI/180) * ($Radius+$ValuePadding) + $X;
+ $Yc = sin(($Angle-90)*PI/180) * ($Radius+$ValuePadding) + $Y;
+ }
+ else
+ {
+ $Xc = cos(($Angle-90)*PI/180) * ($Radius)/2 + $X;
+ $Yc = sin(($Angle-90)*PI/180) * ($Radius)/2 + $Y;
+ }
+
+ if ( $WriteValues == PIE_VALUE_PERCENTAGE )
+ $Display = round(( 100 / $SerieSum ) * $Value)."%";
+ elseif ( $WriteValues == PIE_VALUE_NATURAL )
+ $Display = $Value.$ValueSuffix;
+
+ $this->pChartObject->drawText($Xc,$Yc,$Display,$Settings);
+
+ $Offset = $EndAngle + $DataGapAngle; $ID--;
+ }
+ }
+
+ if ( $DrawLabels && $LabelStacked ) { $this->writeShiftedLabels(); }
+
+ $this->pChartObject->Shadow = $RestoreShadow;
+
+ return(PIE_RENDERED);
+ }
+
+ /* Draw a 3D pie chart */
+ function draw3DPie($X,$Y,$Format="")
+ {
+ /* Rendering layout */
+ $Radius = isset($Format["Radius"]) ? $Format["Radius"] : 80;
+ $SkewFactor = isset($Format["SkewFactor"]) ? $Format["SkewFactor"] : .5;
+ $SliceHeight = isset($Format["SliceHeight"]) ? $Format["SliceHeight"] : 20;
+ $DataGapAngle = isset($Format["DataGapAngle"]) ? $Format["DataGapAngle"] : 0;
+ $DataGapRadius = isset($Format["DataGapRadius"]) ? $Format["DataGapRadius"] : 0;
+ $SecondPass = isset($Format["SecondPass"]) ? $Format["SecondPass"] : TRUE;
+ $Border = isset($Format["Border"]) ? $Format["Border"] : FALSE;
+ $Shadow = isset($Format["Shadow"]) ? $Format["Shadow"] : FALSE;
+ $DrawLabels = isset($Format["DrawLabels"]) ? $Format["DrawLabels"] : FALSE;
+ $LabelStacked = isset($Format["LabelStacked"]) ? $Format["LabelStacked"] : FALSE;
+ $LabelColor = isset($Format["LabelColor"]) ? $Format["LabelColor"] : PIE_LABEL_COLOR_MANUAL;
+ $LabelR = isset($Format["LabelR"]) ? $Format["LabelR"] : 0;
+ $LabelG = isset($Format["LabelG"]) ? $Format["LabelG"] : 0;
+ $LabelB = isset($Format["LabelB"]) ? $Format["LabelB"] : 0;
+ $LabelAlpha = isset($Format["LabelAlpha"]) ? $Format["LabelAlpha"] : 100;
+ $WriteValues = isset($Format["WriteValues"]) ? $Format["WriteValues"] : NULL; //PIE_VALUE_PERCENTAGE
+ $ValuePosition = isset($Format["ValuePosition"]) ? $Format["ValuePosition"] : PIE_VALUE_INSIDE;
+ $ValuePadding = isset($Format["ValuePadding"]) ? $Format["ValuePadding"] : 15;
+ $ValueSuffix = isset($Format["ValueSuffix"]) ? $Format["ValueSuffix"] : "";
+ $ValueR = isset($Format["ValueR"]) ? $Format["ValueR"] : 255;
+ $ValueG = isset($Format["ValueG"]) ? $Format["ValueG"] : 255;
+ $ValueB = isset($Format["ValueB"]) ? $Format["ValueB"] : 255;
+ $ValueAlpha = isset($Format["ValueAlpha"]) ? $Format["ValueAlpha"] : 100;
+ $RecordImageMap = isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE;
+
+ /* Error correction for overlaying rounded corners */
+ if ( $SkewFactor < .5 ) { $SkewFactor = .5; }
+
+ /* Data Processing */
+ $Data = $this->pDataObject->getData();
+ $Palette = $this->pDataObject->getPalette();
+
+ /* Do we have an abscissa serie defined? */
+ if ( $Data["Abscissa"] == "" ) { return(PIE_NO_ABSCISSA); }
+
+ /* Try to find the data serie */
+ $DataSerie = "";
+ foreach ($Data["Series"] as $SerieName => $SerieData)
+ { if ( $SerieName != $Data["Abscissa"]) { $DataSerie = $SerieName; } }
+
+ /* Do we have data to compute? */
+ if ( $DataSerie == "" ) { return(PIE_NO_DATASERIE); }
+
+ /* Remove unused data */
+ list($Data,$Palette) = $this->clean0Values($Data,$Palette,$DataSerie,$Data["Abscissa"]);
+
+ /* Compute the pie sum */
+ $SerieSum = $this->pDataObject->getSum($DataSerie);
+
+ /* Do we have data to draw? */
+ if ( $SerieSum == 0 ) { return(PIE_SUMISNULL); }
+
+ /* Dump the real number of data to draw */
+ $Values = "";
+ foreach ($Data["Series"][$DataSerie]["Data"] as $Key => $Value)
+ { if ($Value != 0) { $Values[] = $Value; } }
+
+ /* Compute the wasted angular space between series */
+ if (count($Values)==1) { $WastedAngular = 0; } else { $WastedAngular = count($Values) * $DataGapAngle; }
+
+ /* Compute the scale */
+ $ScaleFactor = (360 - $WastedAngular) / $SerieSum;
+
+ $RestoreShadow = $this->pChartObject->Shadow;
+ if ( $this->pChartObject->Shadow ) { $this->pChartObject->Shadow = FALSE; }
+
+ /* Draw the polygon pie elements */
+ $Step = 360 / (2 * PI * $Radius);
+ $Offset = 360; $ID = count($Values)-1;
+ $Values = array_reverse($Values);
+ $Slice = 0; $Slices = ""; $SliceColors = ""; $Visible = ""; $SliceAngle = "";
+ foreach($Values as $Key => $Value)
+ {
+ if ( !isset($Palette[$ID]["R"]) ) { $Color = $this->pChartObject->getRandomColor(); $Palette[$ID] = $Color; $this->pDataObject->savePalette($ID,$Color); }
+ $Settings = array("R"=>$Palette[$ID]["R"],"G"=>$Palette[$ID]["G"],"B"=>$Palette[$ID]["B"],"Alpha"=>$Palette[$ID]["Alpha"]);
+
+ $SliceColors[$Slice] = $Settings;
+
+ $StartAngle = $Offset;
+ $EndAngle = $Offset-($Value*$ScaleFactor); if ( $EndAngle < 0 ) { $EndAngle = 0; }
+
+ if ( $StartAngle > 180 ) { $Visible[$Slice]["Start"] = TRUE; } else { $Visible[$Slice]["Start"] = TRUE; }
+ if ( $EndAngle < 180 ) { $Visible[$Slice]["End"] = FALSE; } else { $Visible[$Slice]["End"] = TRUE; }
+
+ if ($DataGapAngle == 0)
+ { $X0 = $X; $Y0 = $Y; }
+ else
+ {
+ $Angle = ($EndAngle - $Offset)/2 + $Offset;
+ $X0 = cos(($Angle-90)*PI/180) * $DataGapRadius + $X;
+ $Y0 = sin(($Angle-90)*PI/180) * $DataGapRadius*$SkewFactor + $Y;
+ }
+ $Slices[$Slice][] = $X0; $Slices[$Slice][] = $Y0; $SliceAngle[$Slice][] = 0;
+
+ for($i=$Offset;$i>=$EndAngle;$i=$i-$Step)
+ {
+ $Xc = cos(($i-90)*PI/180) * $Radius + $X;
+ $Yc = sin(($i-90)*PI/180) * $Radius*$SkewFactor + $Y;
+
+ if ( ($SecondPass || $RestoreShadow ) && ( $i<90 )) { $Yc++; }
+ if ( ($SecondPass || $RestoreShadow ) && ( $i>90 && $i<180 )) { $Xc++; }
+ if ( ($SecondPass || $RestoreShadow ) && ( $i>180 && $i<270 )) { $Xc++; }
+ if ( ($SecondPass || $RestoreShadow ) && ( $i>=270 )) { $Xc++; $Yc++; }
+
+ $Slices[$Slice][] = $Xc; $Slices[$Slice][] = $Yc; $SliceAngle[$Slice][] = $i;
+ }
+
+ $Offset = $i - $DataGapAngle; $ID--; $Slice++;
+ }
+
+ /* Draw the bottom shadow if needed */
+ if ( $RestoreShadow && ($this->pChartObject->ShadowX != 0 || $this->pChartObject->ShadowY !=0 ))
+ {
+ foreach($Slices as $SliceID => $Plots)
+ {
+ $ShadowPie = "";
+ for($i=0;$i<count($Plots);$i=$i+2)
+ { $ShadowPie[] = $Plots[$i]+$this->pChartObject->ShadowX; $ShadowPie[] = $Plots[$i+1]+$this->pChartObject->ShadowY; }
+
+ $Settings = array("R"=>$this->pChartObject->ShadowR,"G"=>$this->pChartObject->ShadowG,"B"=>$this->pChartObject->ShadowB,"Alpha"=>$this->pChartObject->Shadowa,"NoBorder"=>TRUE);
+ $this->pChartObject->drawPolygon($ShadowPie,$Settings);
+ }
+
+ $Step = 360 / (2 * PI * $Radius);
+ $Offset = 360;
+ foreach($Values as $Key => $Value)
+ {
+ $EndAngle = $Offset-($Value*$ScaleFactor); if ( $EndAngle < 0 ) { $EndAngle = 0; }
+
+ for($i=$Offset;$i>=$EndAngle;$i=$i-$Step)
+ {
+ $Xc = cos(($i-90)*PI/180) * $Radius + $X + $this->pChartObject->ShadowX;
+ $Yc = sin(($i-90)*PI/180) * $Radius*$SkewFactor + $Y + $this->pChartObject->ShadowY;
+
+ $this->pChartObject->drawAntialiasPixel($Xc,$Yc,$Settings);
+ }
+
+ $Offset = $i - $DataGapAngle; $ID--;
+ }
+ }
+
+ /* Draw the bottom pie splice */
+ foreach($Slices as $SliceID => $Plots)
+ {
+ $Settings = $SliceColors[$SliceID]; $Settings["NoBorder"] = TRUE;
+ $this->pChartObject->drawPolygon($Plots,$Settings);
+
+ if ( $SecondPass )
+ {
+ $Settings = $SliceColors[$SliceID];
+ if ( $Border )
+ { $Settings["R"]+= 30; $Settings["G"]+= 30; $Settings["B"]+= 30;; }
+
+ if ( isset($SliceAngle[$SliceID][1]) ) /* Empty error handling */
+ {
+ $Angle = $SliceAngle[$SliceID][1];
+ $Xc = cos(($Angle-90)*PI/180) * $Radius + $X;
+ $Yc = sin(($Angle-90)*PI/180) * $Radius*$SkewFactor + $Y;
+ $this->pChartObject->drawLine($Plots[0],$Plots[1],$Xc,$Yc,$Settings);
+
+ $Angle = $SliceAngle[$SliceID][count($SliceAngle[$SliceID])-1];
+ $Xc = cos(($Angle-90)*PI/180) * $Radius + $X;
+ $Yc = sin(($Angle-90)*PI/180) * $Radius*$SkewFactor + $Y;
+ $this->pChartObject->drawLine($Plots[0],$Plots[1],$Xc,$Yc,$Settings);
+ }
+ }
+ }
+
+ /* Draw the two vertical edges */
+ $Slices = array_reverse($Slices);
+ $SliceColors = array_reverse($SliceColors);
+ foreach($Slices as $SliceID => $Plots)
+ {
+ $Settings = $SliceColors[$SliceID];
+ $Settings["R"]+= 10; $Settings["G"]+= 10; $Settings["B"]+= 10; $Settings["NoBorder"] = TRUE;
+
+ if ( $Visible[$SliceID]["Start"] && isset($Plots[2])) /* Empty error handling */
+ {
+ $this->pChartObject->drawLine($Plots[2],$Plots[3],$Plots[2],$Plots[3]- $SliceHeight,array("R"=>$Settings["R"],"G"=>$Settings["G"],"B"=>$Settings["B"]));
+ $Border = "";
+ $Border[] = $Plots[0]; $Border[] = $Plots[1]; $Border[] = $Plots[0]; $Border[] = $Plots[1] - $SliceHeight;
+ $Border[] = $Plots[2]; $Border[] = $Plots[3] - $SliceHeight; $Border[] = $Plots[2]; $Border[] = $Plots[3];
+ $this->pChartObject->drawPolygon($Border,$Settings);
+ }
+ }
+
+ $Slices = array_reverse($Slices);
+ $SliceColors = array_reverse($SliceColors);
+ foreach($Slices as $SliceID => $Plots)
+ {
+ $Settings = $SliceColors[$SliceID];
+ $Settings["R"]+= 10; $Settings["G"]+= 10; $Settings["B"]+= 10; $Settings["NoBorder"] = TRUE;
+ if ( $Visible[$SliceID]["End"] )
+ {
+ $this->pChartObject->drawLine($Plots[count($Plots)-2],$Plots[count($Plots)-1],$Plots[count($Plots)-2],$Plots[count($Plots)-1]- $SliceHeight,array("R"=>$Settings["R"],"G"=>$Settings["G"],"B"=>$Settings["B"]));
+
+ $Border = "";
+ $Border[] = $Plots[0]; $Border[] = $Plots[1]; $Border[] = $Plots[0]; $Border[] = $Plots[1] - $SliceHeight;
+ $Border[] = $Plots[count($Plots)-2]; $Border[] = $Plots[count($Plots)-1] - $SliceHeight; $Border[] = $Plots[count($Plots)-2]; $Border[] = $Plots[count($Plots)-1];
+ $this->pChartObject->drawPolygon($Border,$Settings);
+ }
+ }
+
+ /* Draw the rounded edges */
+ foreach($Slices as $SliceID => $Plots)
+ {
+ $Settings = $SliceColors[$SliceID];
+ $Settings["R"]+= 10; $Settings["G"]+= 10; $Settings["B"]+= 10; $Settings["NoBorder"] = TRUE;
+
+ for ($j=2;$j<count($Plots)-2;$j=$j+2)
+ {
+ $Angle = $SliceAngle[$SliceID][$j/2];
+ if ( $Angle < 270 && $Angle > 90 )
+ {
+ $Border = "";
+ $Border[] = $Plots[$j]; $Border[] = $Plots[$j+1];
+ $Border[] = $Plots[$j+2]; $Border[] = $Plots[$j+3];
+ $Border[] = $Plots[$j+2]; $Border[] = $Plots[$j+3] - $SliceHeight;
+ $Border[] = $Plots[$j]; $Border[] = $Plots[$j+1] - $SliceHeight;
+ $this->pChartObject->drawPolygon($Border,$Settings);
+ }
+ }
+
+ if ( $SecondPass )
+ {
+ $Settings = $SliceColors[$SliceID];
+ if ( $Border )
+ { $Settings["R"]+= 30; $Settings["G"]+= 30; $Settings["B"]+= 30; }
+
+ if ( isset($SliceAngle[$SliceID][1]) ) /* Empty error handling */
+ {
+ $Angle = $SliceAngle[$SliceID][1];
+ if ( $Angle < 270 && $Angle > 90 )
+ {
+ $Xc = cos(($Angle-90)*PI/180) * $Radius + $X;
+ $Yc = sin(($Angle-90)*PI/180) * $Radius*$SkewFactor + $Y;
+ $this->pChartObject->drawLine($Xc,$Yc,$Xc,$Yc-$SliceHeight,$Settings);
+ }
+ }
+
+ $Angle = $SliceAngle[$SliceID][count($SliceAngle[$SliceID])-1];
+ if ( $Angle < 270 && $Angle > 90 )
+ {
+ $Xc = cos(($Angle-90)*PI/180) * $Radius + $X;
+ $Yc = sin(($Angle-90)*PI/180) * $Radius*$SkewFactor + $Y;
+ $this->pChartObject->drawLine($Xc,$Yc,$Xc,$Yc-$SliceHeight,$Settings);
+ }
+
+ if ( isset($SliceAngle[$SliceID][1]) && $SliceAngle[$SliceID][1] > 270 && $SliceAngle[$SliceID][count($SliceAngle[$SliceID])-1] < 270 )
+ {
+ $Xc = cos((270-90)*PI/180) * $Radius + $X;
+ $Yc = sin((270-90)*PI/180) * $Radius*$SkewFactor + $Y;
+ $this->pChartObject->drawLine($Xc,$Yc,$Xc,$Yc-$SliceHeight,$Settings);
+ }
+
+ if ( isset($SliceAngle[$SliceID][1]) && $SliceAngle[$SliceID][1] > 90 && $SliceAngle[$SliceID][count($SliceAngle[$SliceID])-1] < 90 )
+ {
+ $Xc = cos((0)*PI/180) * $Radius + $X;
+ $Yc = sin((0)*PI/180) * $Radius*$SkewFactor + $Y;
+ $this->pChartObject->drawLine($Xc,$Yc,$Xc,$Yc-$SliceHeight,$Settings);
+ }
+
+ }
+ }
+
+ /* Draw the top splice */
+ foreach($Slices as $SliceID => $Plots)
+ {
+ $Settings = $SliceColors[$SliceID];
+ $Settings["R"]+= 20; $Settings["G"]+= 20; $Settings["B"]+= 20;
+
+ $Top = "";
+ for($j=0;$j<count($Plots);$j=$j+2) { $Top[] = $Plots[$j]; $Top[] = $Plots[$j+1]- $SliceHeight; }
+ $this->pChartObject->drawPolygon($Top,$Settings);
+
+ if ( $RecordImageMap && !$Shadow ) { $this->pChartObject->addToImageMap("POLY",$this->arraySerialize($Top),$this->pChartObject->toHTMLColor($Settings["R"],$Settings["G"],$Settings["B"]),$Data["Series"][$Data["Abscissa"]]["Data"][count($Slices)-$SliceID-1],$Values[$SliceID]); }
+ }
+
+
+ /* Second pass to smooth the angles */
+ if ( $SecondPass )
+ {
+ $Step = 360 / (2 * PI * $Radius);
+ $Offset = 360; $ID = count($Values)-1;
+ foreach($Values as $Key => $Value)
+ {
+ $FirstPoint = TRUE;
+ if ( $Shadow )
+ $Settings = array("R"=>$this->pChartObject->ShadowR,"G"=>$this->pChartObject->ShadowG,"B"=>$this->pChartObject->ShadowB,"Alpha"=>$this->pChartObject->Shadowa);
+ else
+ {
+ if ( $Border )
+ { $Settings = array("R"=>$Palette[$ID]["R"]+30,"G"=>$Palette[$ID]["G"]+30,"B"=>$Palette[$ID]["B"]+30,"Alpha"=>$Palette[$ID]["Alpha"]); }
+ else
+ $Settings = array("R"=>$Palette[$ID]["R"],"G"=>$Palette[$ID]["G"],"B"=>$Palette[$ID]["B"],"Alpha"=>$Palette[$ID]["Alpha"]);
+ }
+
+ $EndAngle = $Offset-($Value*$ScaleFactor); if ( $EndAngle < 0 ) { $EndAngle = 0; }
+
+ if ($DataGapAngle == 0)
+ { $X0 = $X; $Y0 = $Y- $SliceHeight; }
+ else
+ {
+ $Angle = ($EndAngle - $Offset)/2 + $Offset;
+ $X0 = cos(($Angle-90)*PI/180) * $DataGapRadius + $X;
+ $Y0 = sin(($Angle-90)*PI/180) * $DataGapRadius*$SkewFactor + $Y - $SliceHeight;
+ }
+ $Plots[] = $X0; $Plots[] = $Y0;
+
+ for($i=$Offset;$i>=$EndAngle;$i=$i-$Step)
+ {
+ $Xc = cos(($i-90)*PI/180) * $Radius + $X;
+ $Yc = sin(($i-90)*PI/180) * $Radius*$SkewFactor + $Y - $SliceHeight;
+
+ if ( $FirstPoint ) { $this->pChartObject->drawLine($Xc,$Yc,$X0,$Y0,$Settings); } { $FirstPoint = FALSE; }
+
+ $this->pChartObject->drawAntialiasPixel($Xc,$Yc,$Settings);
+ if ($i < 270 && $i > 90 ) { $this->pChartObject->drawAntialiasPixel($Xc,$Yc+$SliceHeight,$Settings); }
+ }
+ $this->pChartObject->drawLine($Xc,$Yc,$X0,$Y0,$Settings);
+
+ $Offset = $i - $DataGapAngle; $ID--;
+ }
+ }
+
+ if ( $WriteValues != NULL )
+ {
+ $Step = 360 / (2 * PI * $Radius);
+ $Offset = 360; $ID = count($Values)-1;
+ $Settings = array("Align"=>TEXT_ALIGN_MIDDLEMIDDLE,"R"=>$ValueR,"G"=>$ValueG,"B"=>$ValueB,"Alpha"=>$ValueAlpha);
+ foreach($Values as $Key => $Value)
+ {
+ $EndAngle = $Offset-($Value*$ScaleFactor); if ( $EndAngle < 0 ) { $EndAngle = 0; }
+
+ $Angle = ($EndAngle - $Offset)/2 + $Offset;
+
+ if ( $ValuePosition == PIE_VALUE_OUTSIDE )
+ {
+ $Xc = cos(($Angle-90)*PI/180) * ($Radius+$ValuePadding) + $X;
+ $Yc = sin(($Angle-90)*PI/180) * (($Radius*$SkewFactor)+$ValuePadding) + $Y - $SliceHeight;
+ }
+ else
+ {
+ $Xc = cos(($Angle-90)*PI/180) * ($Radius)/2 + $X;
+ $Yc = sin(($Angle-90)*PI/180) * ($Radius*$SkewFactor)/2 + $Y - $SliceHeight;
+ }
+
+ if ( $WriteValues == PIE_VALUE_PERCENTAGE )
+ $Display = round(( 100 / $SerieSum ) * $Value)."%";
+ elseif ( $WriteValues == PIE_VALUE_NATURAL )
+ $Display = $Value.$ValueSuffix;
+
+ $this->pChartObject->drawText($Xc,$Yc,$Display,$Settings);
+
+ $Offset = $EndAngle - $DataGapAngle; $ID--;
+ }
+ }
+
+ if ( $DrawLabels )
+ {
+ $Step = 360 / (2 * PI * $Radius);
+ $Offset = 360; $ID = count($Values)-1;
+ foreach($Values as $Key => $Value)
+ {
+ if ( $LabelColor == PIE_LABEL_COLOR_AUTO )
+ { $Settings = array("FillR"=>$Palette[$ID]["R"],"FillG"=>$Palette[$ID]["G"],"FillB"=>$Palette[$ID]["B"],"Alpha"=>$Palette[$ID]["Alpha"]);}
+ else
+ { $Settings = array("FillR"=>$LabelR,"FillG"=>$LabelG,"FillB"=>$LabelB,"Alpha"=>$LabelAlpha); }
+
+ $EndAngle = $Offset-($Value*$ScaleFactor); if ( $EndAngle < 0 ) { $EndAngle = 0; }
+
+ $Angle = ($EndAngle - $Offset)/2 + $Offset;
+ $Xc = cos(($Angle-90)*PI/180) * $Radius + $X;
+ $Yc = sin(($Angle-90)*PI/180) * $Radius*$SkewFactor + $Y - $SliceHeight;
+
+ if ( isset($Data["Series"][$Data["Abscissa"]]["Data"][$ID]) )
+ {
+ $Label = $Data["Series"][$Data["Abscissa"]]["Data"][$ID];
+
+ if ( $LabelStacked )
+ $this->writePieLabel($Xc,$Yc,$Label,$Angle,$Settings,TRUE,$X,$Y,$Radius,TRUE);
+ else
+ $this->writePieLabel($Xc,$Yc,$Label,$Angle,$Settings,FALSE);
+ }
+
+ $Offset = $EndAngle - $DataGapAngle; $ID--;
+ }
+ }
+
+ if ( $DrawLabels && $LabelStacked ) { $this->writeShiftedLabels(); }
+
+ $this->pChartObject->Shadow = $RestoreShadow;
+
+ return(PIE_RENDERED);
+ }
+
+ /* Draw the legend of pie chart */
+ function drawPieLegend($X,$Y,$Format="")
+ {
+ $FontName = isset($Format["FontName"]) ? $Format["FontName"] : $this->pChartObject->FontName;
+ $FontSize = isset($Format["FontSize"]) ? $Format["FontSize"] : $this->pChartObject->FontSize;
+ $FontR = isset($Format["FontR"]) ? $Format["FontR"] : $this->pChartObject->FontColorR;
+ $FontG = isset($Format["FontG"]) ? $Format["FontG"] : $this->pChartObject->FontColorG;
+ $FontB = isset($Format["FontB"]) ? $Format["FontB"] : $this->pChartObject->FontColorB;
+ $BoxSize = isset($Format["BoxSize"]) ? $Format["BoxSize"] : 5;
+ $Margin = isset($Format["Margin"]) ? $Format["Margin"] : 5;
+ $R = isset($Format["R"]) ? $Format["R"] : 200;
+ $G = isset($Format["G"]) ? $Format["G"] : 200;
+ $B = isset($Format["B"]) ? $Format["B"] : 200;
+ $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
+ $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : 255;
+ $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : 255;
+ $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : 255;
+ $Surrounding = isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL;
+ $Style = isset($Format["Style"]) ? $Format["Style"] : LEGEND_ROUND;
+ $Mode = isset($Format["Mode"]) ? $Format["Mode"] : LEGEND_VERTICAL;
+
+ if ( $Surrounding != NULL ) { $BorderR = $R + $Surrounding; $BorderG = $G + $Surrounding; $BorderB = $B + $Surrounding; }
+
+ $YStep = max($this->pChartObject->FontSize,$BoxSize) + 5;
+ $XStep = $BoxSize + 5;
+
+ /* Data Processing */
+ $Data = $this->pDataObject->getData();
+ $Palette = $this->pDataObject->getPalette();
+
+ /* Do we have an abscissa serie defined? */
+ if ( $Data["Abscissa"] == "" ) { return(PIE_NO_ABSCISSA); }
+
+ $Boundaries = ""; $Boundaries["L"] = $X; $Boundaries["T"] = $Y; $Boundaries["R"] = 0; $Boundaries["B"] = 0; $vY = $Y; $vX = $X;
+ foreach($Data["Series"][$Data["Abscissa"]]["Data"] as $Key => $Value)
+ {
+ $BoxArray = $this->pChartObject->getTextBox($vX+$BoxSize+4,$vY+$BoxSize/2,$FontName,$FontSize,0,$Value);
+
+ if ( $Mode == LEGEND_VERTICAL )
+ {
+ if ( $Boundaries["T"] > $BoxArray[2]["Y"]+$BoxSize/2 ) { $Boundaries["T"] = $BoxArray[2]["Y"]+$BoxSize/2; }
+ if ( $Boundaries["R"] < $BoxArray[1]["X"]+2 ) { $Boundaries["R"] = $BoxArray[1]["X"]+2; }
+ if ( $Boundaries["B"] < $BoxArray[1]["Y"]+2+$BoxSize/2 ) { $Boundaries["B"] = $BoxArray[1]["Y"]+2+$BoxSize/2; }
+ $vY=$vY+$YStep;
+ }
+ elseif ( $Mode == LEGEND_HORIZONTAL )
+ {
+ if ( $Boundaries["T"] > $BoxArray[2]["Y"]+$BoxSize/2 ) { $Boundaries["T"] = $BoxArray[2]["Y"]+$BoxSize/2; }
+ if ( $Boundaries["R"] < $BoxArray[1]["X"]+2 ) { $Boundaries["R"] = $BoxArray[1]["X"]+2; }
+ if ( $Boundaries["B"] < $BoxArray[1]["Y"]+2+$BoxSize/2 ) { $Boundaries["B"] = $BoxArray[1]["Y"]+2+$BoxSize/2; }
+ $vX=$Boundaries["R"]+$XStep;
+ }
+ }
+ $vY=$vY-$YStep; $vX=$vX-$XStep;
+
+ $TopOffset = $Y - $Boundaries["T"];
+ if ( $Boundaries["B"]-($vY+$BoxSize) < $TopOffset ) { $Boundaries["B"] = $vY+$BoxSize+$TopOffset; }
+
+ if ( $Style == LEGEND_ROUND )
+ $this->pChartObject->drawRoundedFilledRectangle($Boundaries["L"]-$Margin,$Boundaries["T"]-$Margin,$Boundaries["R"]+$Margin,$Boundaries["B"]+$Margin,$Margin,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"BorderR"=>$BorderR,"BorderG"=>$BorderG,"BorderB"=>$BorderB));
+ elseif ( $Style == LEGEND_BOX )
+ $this->pChartObject->drawFilledRectangle($Boundaries["L"]-$Margin,$Boundaries["T"]-$Margin,$Boundaries["R"]+$Margin,$Boundaries["B"]+$Margin,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"BorderR"=>$BorderR,"BorderG"=>$BorderG,"BorderB"=>$BorderB));
+
+ $RestoreShadow = $this->pChartObject->Shadow; $this->pChartObject->Shadow = FALSE;
+ foreach($Data["Series"][$Data["Abscissa"]]["Data"] as $Key => $Value)
+ {
+ $R = $Palette[$Key]["R"]; $G = $Palette[$Key]["G"]; $B = $Palette[$Key]["B"];
+
+ $this->pChartObject->drawFilledRectangle($X+1,$Y+1,$X+$BoxSize+1,$Y+$BoxSize+1,array("R"=>0,"G"=>0,"B"=>0,"Alpha"=>20));
+ $this->pChartObject->drawFilledRectangle($X,$Y,$X+$BoxSize,$Y+$BoxSize,array("R"=>$R,"G"=>$G,"B"=>$B,"Surrounding"=>20));
+ if ( $Mode == LEGEND_VERTICAL )
+ {
+ $this->pChartObject->drawText($X+$BoxSize+4,$Y+$BoxSize/2,$Value,array("R"=>$FontR,"G"=>$FontG,"B"=>$FontB,"Align"=>TEXT_ALIGN_MIDDLELEFT,"FontName"=>$FontName,"FontSize"=>$FontSize));
+ $Y=$Y+$YStep;
+ }
+ elseif ( $Mode == LEGEND_HORIZONTAL )
+ {
+ $BoxArray = $this->pChartObject->drawText($X+$BoxSize+4,$Y+$BoxSize/2,$Value,array("R"=>$FontR,"G"=>$FontG,"B"=>$FontB,"Align"=>TEXT_ALIGN_MIDDLELEFT,"FontName"=>$FontName,"FontSize"=>$FontSize));
+ $X=$BoxArray[1]["X"]+2+$XStep;
+ }
+ }
+
+ $this->Shadow = $RestoreShadow;
+ }
+
+ /* Set the color of the specified slice */
+ function setSliceColor($SliceID,$Format="")
+ {
+ $R = isset($Format["R"]) ? $Format["R"] : 0;
+ $G = isset($Format["G"]) ? $Format["G"] : 0;
+ $B = isset($Format["B"]) ? $Format["B"] : 0;
+ $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
+
+ $this->pDataObject->Palette[$SliceID]["R"] = $R;
+ $this->pDataObject->Palette[$SliceID]["G"] = $G;
+ $this->pDataObject->Palette[$SliceID]["B"] = $B;
+ $this->pDataObject->Palette[$SliceID]["Alpha"] = $Alpha;
+ }
+
+ /* Internally used compute the label positions */
+ function writePieLabel($X,$Y,$Label,$Angle,$Settings,$Stacked,$Xc=0,$Yc=0,$Radius=0,$Reversed=FALSE)
+ {
+ $LabelOffset = 30;
+ $FontName = $this->pChartObject->FontName;
+ $FontSize = $this->pChartObject->FontSize;
+
+ if ( !$Stacked )
+ {
+ $Settings["Angle"] = 360-$Angle;
+ $Settings["Length"] = 25;
+ $Settings["Size"] = 8;
+
+ $this->pChartObject->drawArrowLabel($X,$Y," ".$Label." ",$Settings);
+ }
+ else
+ {
+ $X2 = cos(deg2rad($Angle-90))*20+$X;
+ $Y2 = sin(deg2rad($Angle-90))*20+$Y;
+
+ $TxtPos = $this->pChartObject->getTextBox($X,$Y,$FontName,$FontSize,0,$Label);
+ $Height = $TxtPos[0]["Y"] - $TxtPos[2]["Y"];
+ $YTop = $Y2 - $Height/2 - 2;
+ $YBottom = $Y2 + $Height/2 + 2;
+
+ if ( $this->LabelPos != "" )
+ {
+ $Done = FALSE;
+ foreach($this->LabelPos as $Key => $Settings)
+ {
+ if ( !$Done )
+ {
+ if ( $Angle <= 90 && (($YTop >= $Settings["YTop"] && $YTop <= $Settings["YBottom"]) || ($YBottom >= $Settings["YTop"] && $YBottom <= $Settings["YBottom"])))
+ { $this->shift(0,180,-($Height+2),$Reversed); $Done = TRUE; }
+ if ( $Angle > 90 && $Angle <= 180 && (($YTop >= $Settings["YTop"] && $YTop <= $Settings["YBottom"]) || ($YBottom >= $Settings["YTop"] && $YBottom <= $Settings["YBottom"])))
+ { $this->shift(0,180,-($Height+2),$Reversed); $Done = TRUE; }
+ if ( $Angle > 180 && $Angle <= 270 && (($YTop >= $Settings["YTop"] && $YTop <= $Settings["YBottom"]) || ($YBottom >= $Settings["YTop"] && $YBottom <= $Settings["YBottom"])))
+ { $this->shift(180,360,($Height+2),$Reversed); $Done = TRUE; }
+ if ( $Angle > 270 && $Angle <= 360 && (($YTop >= $Settings["YTop"] && $YTop <= $Settings["YBottom"]) || ($YBottom >= $Settings["YTop"] && $YBottom <= $Settings["YBottom"])))
+ { $this->shift(180,360,($Height+2),$Reversed); $Done = TRUE; }
+ }
+ }
+ }
+
+ $LabelSettings = array("YTop"=>$YTop,"YBottom"=>$YBottom,"Label"=>$Label,"Angle"=>$Angle,"X1"=>$X,"Y1"=>$Y,"X2"=>$X2,"Y2"=>$Y2);
+ if ( $Angle <= 180 ) { $LabelSettings["X3"] = $Xc+$Radius+$LabelOffset; }
+ if ( $Angle > 180 ) { $LabelSettings["X3"] = $Xc-$Radius-$LabelOffset; }
+ $this->LabelPos[] = $LabelSettings;
+ }
+ }
+
+ /* Internally used to shift label positions */
+ function shift($StartAngle,$EndAngle,$Offset,$Reversed)
+ {
+ if ( $Reversed ) { $Offset = -$Offset; }
+ foreach($this->LabelPos as $Key => $Settings)
+ {
+ if ( $Settings["Angle"] > $StartAngle && $Settings["Angle"] <= $EndAngle ) { $this->LabelPos[$Key]["YTop"] = $Settings["YTop"] + $Offset; $this->LabelPos[$Key]["YBottom"] = $Settings["YBottom"] + $Offset; $this->LabelPos[$Key]["Y2"] = $Settings["Y2"] + $Offset; }
+ }
+ }
+
+ /* Internally used to write the re-computed labels */
+ function writeShiftedLabels()
+ {
+ if ( $this->LabelPos == "" ) { return(0); }
+ foreach($this->LabelPos as $Key => $Settings)
+ {
+ $X1 = $Settings["X1"]; $Y1 = $Settings["Y1"];
+ $X2 = $Settings["X2"]; $Y2 = $Settings["Y2"];
+ $X3 = $Settings["X3"];
+ $Angle = $Settings["Angle"];
+ $Label = $Settings["Label"];
+
+ $this->pChartObject->drawArrow($X2,$Y2,$X1,$Y1,array("Size"=>8));
+ if ( $Angle <= 180 )
+ {
+ $this->pChartObject->drawLine($X2,$Y2,$X3,$Y2);
+ $this->pChartObject->drawText($X3+2,$Y2,$Label,array("Align"=>TEXT_ALIGN_MIDDLELEFT));
+ }
+ else
+ {
+ $this->pChartObject->drawLine($X2,$Y2,$X3,$Y2);
+ $this->pChartObject->drawText($X3-2,$Y2,$Label,array("Align"=>TEXT_ALIGN_MIDDLERIGHT));
+ }
+ }
+ }
+
+ /* Draw a ring chart */
+ function draw2DRing($X,$Y,$Format="")
+ {
+ $OuterRadius = isset($Format["Radius"]) ? $Format["Radius"] : 60;
+ $InnerRadius = isset($Format["Radius"]) ? $Format["Radius"] : 30;
+ $Border = isset($Format["Border"]) ? $Format["Border"] : FALSE;
+ $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : 255;
+ $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : 255;
+ $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : 255;
+ $BorderAlpha = isset($Format["BorderAlpha"]) ? $Format["BorderAlpha"] : 100;
+ $Shadow = isset($Format["Shadow"]) ? $Format["Shadow"] : FALSE;
+ $DrawLabels = isset($Format["DrawLabels"]) ? $Format["DrawLabels"] : FALSE;
+ $LabelStacked = isset($Format["LabelStacked"]) ? $Format["LabelStacked"] : FALSE;
+ $LabelColor = isset($Format["LabelColor"]) ? $Format["LabelColor"] : PIE_LABEL_COLOR_MANUAL;
+ $LabelR = isset($Format["LabelR"]) ? $Format["LabelR"] : 0;
+ $LabelG = isset($Format["LabelG"]) ? $Format["LabelG"] : 0;
+ $LabelB = isset($Format["LabelB"]) ? $Format["LabelB"] : 0;
+ $LabelAlpha = isset($Format["LabelAlpha"]) ? $Format["LabelAlpha"] : 100;
+ $WriteValues = isset($Format["WriteValues"]) ? $Format["WriteValues"] : NULL; //PIE_VALUE_PERCENTAGE
+ $ValuePadding = isset($Format["ValuePadding"]) ? $Format["ValuePadding"] : 5;
+ $ValuePosition = isset($Format["ValuePosition"]) ? $Format["ValuePosition"] : PIE_VALUE_OUTSIDE;
+ $ValueSuffix = isset($Format["ValueSuffix"]) ? $Format["ValueSuffix"] : "";
+ $ValueR = isset($Format["ValueR"]) ? $Format["ValueR"] : 255;
+ $ValueG = isset($Format["ValueG"]) ? $Format["ValueG"] : 255;
+ $ValueB = isset($Format["ValueB"]) ? $Format["ValueB"] : 255;
+ $ValueAlpha = isset($Format["ValueAlpha"]) ? $Format["ValueAlpha"] : 100;
+ $RecordImageMap = isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE;
+
+ /* Data Processing */
+ $Data = $this->pDataObject->getData();
+ $Palette = $this->pDataObject->getPalette();
+
+ /* Do we have an abscissa serie defined? */
+ if ( $Data["Abscissa"] == "" ) { return(PIE_NO_ABSCISSA); }
+
+ /* Try to find the data serie */
+ $DataSerie = "";
+ foreach ($Data["Series"] as $SerieName => $SerieData)
+ { if ( $SerieName != $Data["Abscissa"]) { $DataSerie = $SerieName; } }
+
+ /* Do we have data to compute? */
+ if ( $DataSerie == "" ) { return(PIE_NO_DATASERIE); }
+
+ /* Remove unused data */
+ list($Data,$Palette) = $this->clean0Values($Data,$Palette,$DataSerie,$Data["Abscissa"]);
+
+ /* Compute the pie sum */
+ $SerieSum = $this->pDataObject->getSum($DataSerie);
+
+ /* Do we have data to draw? */
+ if ( $SerieSum == 0 ) { return(PIE_SUMISNULL); }
+
+ /* Dump the real number of data to draw */
+ $Values = "";
+ foreach ($Data["Series"][$DataSerie]["Data"] as $Key => $Value)
+ { if ($Value != 0) { $Values[] = $Value; } }
+
+ /* Compute the wasted angular space between series */
+ if (count($Values)==1) { $WastedAngular = 0; } else { $WastedAngular = 0; } // count($Values)
+
+ /* Compute the scale */
+ $ScaleFactor = (360 - $WastedAngular) / $SerieSum;
+
+ $RestoreShadow = $this->pChartObject->Shadow;
+ if ( $this->pChartObject->Shadow )
+ {
+ $this->pChartObject->Shadow = FALSE;
+
+ $ShadowFormat = $Format; $ShadowFormat["Shadow"] = TRUE;
+ $this->draw2DRing($X+$this->pChartObject->ShadowX,$Y+$this->pChartObject->ShadowY,$ShadowFormat);
+ }
+
+ /* Draw the polygon pie elements */
+ $Step = 360 / (2 * PI * $OuterRadius);
+ $Offset = 0; $ID = 0;
+ foreach($Values as $Key => $Value)
+ {
+ if ( $Shadow )
+ {
+ $Settings = array("R"=>$this->pChartObject->ShadowR,"G"=>$this->pChartObject->ShadowG,"B"=>$this->pChartObject->ShadowB,"Alpha"=>$this->pChartObject->Shadowa);
+ $BorderColor = $Settings;
+ }
+ else
+ {
+ if ( !isset($Palette[$ID]["R"]) ) { $Color = $this->pChartObject->getRandomColor(); $Palette[$ID] = $Color; $this->pDataObject->savePalette($ID,$Color); }
+ $Settings = array("R"=>$Palette[$ID]["R"],"G"=>$Palette[$ID]["G"],"B"=>$Palette[$ID]["B"],"Alpha"=>$Palette[$ID]["Alpha"]);
+
+ if ( $Border )
+ $BorderColor = array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha);
+ else
+ $BorderColor = $Settings;
+ }
+
+ $Plots = ""; $Boundaries = ""; $AAPixels = "";
+ $EndAngle = $Offset+($Value*$ScaleFactor); if ( $EndAngle > 360 ) { $EndAngle = 360; }
+ for($i=$Offset;$i<=$EndAngle;$i=$i+$Step)
+ {
+ $Xc = cos(($i-90)*PI/180) * $OuterRadius + $X;
+ $Yc = sin(($i-90)*PI/180) * $OuterRadius + $Y;
+
+ if ( !isset($Boundaries[0]["X1"]) ) { $Boundaries[0]["X1"] = $Xc; $Boundaries[0]["Y1"] = $Yc; }
+ $AAPixels[] = array($Xc,$Yc);
+
+ if ( $i<90 ) { $Yc++; }
+ if ( $i>180 && $i<270 ) { $Xc++; }
+ if ( $i>=270 ) { $Xc++; $Yc++; }
+
+ $Plots[] = $Xc; $Plots[] = $Yc;
+ }
+ $Boundaries[1]["X1"] = $Xc; $Boundaries[1]["Y1"] = $Yc;
+ $Lasti = $EndAngle;
+
+ for($i=$EndAngle;$i>=$Offset;$i=$i-$Step)
+ {
+ $Xc = cos(($i-90)*PI/180) * ($InnerRadius-1) + $X;
+ $Yc = sin(($i-90)*PI/180) * ($InnerRadius-1) + $Y;
+
+ if ( !isset($Boundaries[1]["X2"]) ) { $Boundaries[1]["X2"] = $Xc; $Boundaries[1]["Y2"] = $Yc; }
+ $AAPixels[] = array($Xc,$Yc);
+
+ $Xc = cos(($i-90)*PI/180) * $InnerRadius + $X;
+ $Yc = sin(($i-90)*PI/180) * $InnerRadius + $Y;
+
+ if ( $i<90 ) { $Yc++; }
+ if ( $i>180 && $i<270 ) { $Xc++; }
+ if ( $i>=270 ) { $Xc++; $Yc++; }
+
+ $Plots[] = $Xc; $Plots[] = $Yc;
+ }
+ $Boundaries[0]["X2"] = $Xc; $Boundaries[0]["Y2"] = $Yc;
+
+ /* Draw the polygon */
+ $this->pChartObject->drawPolygon($Plots,$Settings);
+ if ( $RecordImageMap && !$Shadow ) { $this->pChartObject->addToImageMap("POLY",$this->arraySerialize($Plots),$this->pChartObject->toHTMLColor($Palette[$ID]["R"],$Palette[$ID]["G"],$Palette[$ID]["B"]),$Data["Series"][$Data["Abscissa"]]["Data"][$Key],$Value); }
+
+ /* Smooth the edges using AA */
+ foreach($AAPixels as $iKey => $Pos ) { $this->pChartObject->drawAntialiasPixel($Pos[0],$Pos[1],$BorderColor); }
+ $this->pChartObject->drawLine($Boundaries[0]["X1"],$Boundaries[0]["Y1"],$Boundaries[0]["X2"],$Boundaries[0]["Y2"],$BorderColor);
+ $this->pChartObject->drawLine($Boundaries[1]["X1"],$Boundaries[1]["Y1"],$Boundaries[1]["X2"],$Boundaries[1]["Y2"],$BorderColor);
+
+ if ( $DrawLabels && !$Shadow )
+ {
+ if ( $LabelColor == PIE_LABEL_COLOR_AUTO )
+ { $Settings = array("FillR"=>$Palette[$ID]["R"],"FillG"=>$Palette[$ID]["G"],"FillB"=>$Palette[$ID]["B"],"Alpha"=>$Palette[$ID]["Alpha"]);}
+ else
+ { $Settings = array("FillR"=>$LabelR,"FillG"=>$LabelG,"FillB"=>$LabelB,"Alpha"=>$LabelAlpha); }
+
+ $Angle = ($EndAngle - $Offset)/2 + $Offset;
+ $Xc = cos(($Angle-90)*PI/180) * $OuterRadius + $X;
+ $Yc = sin(($Angle-90)*PI/180) * $OuterRadius + $Y;
+
+ $Label = $Data["Series"][$Data["Abscissa"]]["Data"][$Key];
+
+ if ( $LabelStacked )
+ $this->writePieLabel($Xc,$Yc,$Label,$Angle,$Settings,TRUE,$X,$Y,$OuterRadius);
+ else
+ $this->writePieLabel($Xc,$Yc,$Label,$Angle,$Settings,FALSE);
+ }
+
+ $Offset = $Lasti; $ID++;
+ }
+
+ if ( $DrawLabels && $LabelStacked ) { $this->writeShiftedLabels(); }
+
+ if ( $WriteValues && !$Shadow )
+ {
+ $Step = 360 / (2 * PI * $OuterRadius);
+ $Offset = 0;
+ foreach($Values as $Key => $Value)
+ {
+ $EndAngle = $Offset+($Value*$ScaleFactor);
+ if ( $EndAngle > 360 ) { $EndAngle = 360; }
+
+ $Angle = $Offset+($Value*$ScaleFactor)/2;
+ if ( $ValuePosition == PIE_VALUE_OUTSIDE )
+ {
+ $Xc = cos(($Angle-90)*PI/180) * ($OuterRadius+$ValuePadding) + $X;
+ $Yc = sin(($Angle-90)*PI/180) * ($OuterRadius+$ValuePadding) + $Y;
+ if ( $Angle >=0 && $Angle <= 90 ) { $Align = TEXT_ALIGN_BOTTOMLEFT; }
+ if ( $Angle > 90 && $Angle <= 180 ) { $Align = TEXT_ALIGN_TOPLEFT; }
+ if ( $Angle > 180 && $Angle <= 270 ) { $Align = TEXT_ALIGN_TOPRIGHT; }
+ if ( $Angle > 270 ) { $Align = TEXT_ALIGN_BOTTOMRIGHT; }
+ }
+ else
+ {
+ $Xc = cos(($Angle-90)*PI/180) * (($OuterRadius-$InnerRadius)/2+$InnerRadius) + $X;
+ $Yc = sin(($Angle-90)*PI/180) * (($OuterRadius-$InnerRadius)/2+$InnerRadius) + $Y;
+ $Align = TEXT_ALIGN_MIDDLEMIDDLE;
+ }
+
+ if ( $WriteValues == PIE_VALUE_PERCENTAGE )
+ $Display = round(( 100 / $SerieSum ) * $Value)."%";
+ elseif ( $WriteValues == PIE_VALUE_NATURAL )
+ $Display = $Value.$ValueSuffix;
+
+ $this->pChartObject->drawText($Xc,$Yc,$Display,array("Align"=>$Align,"R"=>$ValueR,"G"=>$ValueG,"B"=>$ValueB));
+ $Offset = $EndAngle;
+ }
+ }
+
+ $this->pChartObject->Shadow = $RestoreShadow;
+
+ return(PIE_RENDERED);
+ }
+
+ /* Draw a 3D ring chart */
+ function draw3DRing($X,$Y,$Format="")
+ {
+ /* Rendering layout */
+ $OuterRadius = isset($Format["OuterRadius"]) ? $Format["OuterRadius"] : 100;
+ $InnerRadius = isset($Format["InnerRadius"]) ? $Format["InnerRadius"] : 30;
+ $SkewFactor = isset($Format["SkewFactor"]) ? $Format["SkewFactor"] : .6;
+ $SliceHeight = isset($Format["SliceHeight"]) ? $Format["SliceHeight"] : 10;
+ $DataGapAngle = isset($Format["DataGapAngle"]) ? $Format["DataGapAngle"] : 10;
+ $DataGapRadius = isset($Format["DataGapRadius"]) ? $Format["DataGapRadius"] : 10;
+ $Border = isset($Format["Border"]) ? $Format["Border"] : FALSE;
+ $Shadow = isset($Format["Shadow"]) ? $Format["Shadow"] : FALSE;
+ $DrawLabels = isset($Format["DrawLabels"]) ? $Format["DrawLabels"] : FALSE;
+ $LabelStacked = isset($Format["LabelStacked"]) ? $Format["LabelStacked"] : FALSE;
+ $LabelColor = isset($Format["LabelColor"]) ? $Format["LabelColor"] : PIE_LABEL_COLOR_MANUAL;
+ $LabelR = isset($Format["LabelR"]) ? $Format["LabelR"] : 0;
+ $LabelG = isset($Format["LabelG"]) ? $Format["LabelG"] : 0;
+ $LabelB = isset($Format["LabelB"]) ? $Format["LabelB"] : 0;
+ $LabelAlpha = isset($Format["LabelAlpha"]) ? $Format["LabelAlpha"] : 100;
+ $Cf = isset($Format["Cf"]) ? $Format["Cf"] : 20;
+ $WriteValues = isset($Format["WriteValues"]) ? $Format["WriteValues"] : NULL;
+ $ValuePadding = isset($Format["ValuePadding"]) ? $Format["ValuePadding"] : $SliceHeight + 15;
+ $ValuePosition = isset($Format["ValuePosition"]) ? $Format["ValuePosition"] : PIE_VALUE_OUTSIDE;
+ $ValueSuffix = isset($Format["ValueSuffix"]) ? $Format["ValueSuffix"] : "";
+ $ValueR = isset($Format["ValueR"]) ? $Format["ValueR"] : 255;
+ $ValueG = isset($Format["ValueG"]) ? $Format["ValueG"] : 255;
+ $ValueB = isset($Format["ValueB"]) ? $Format["ValueB"] : 255;
+ $ValueAlpha = isset($Format["ValueAlpha"]) ? $Format["ValueAlpha"] : 100;
+ $RecordImageMap = isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE;
+
+ /* Error correction for overlaying rounded corners */
+ if ( $SkewFactor < .5 ) { $SkewFactor = .5; }
+
+ /* Data Processing */
+ $Data = $this->pDataObject->getData();
+ $Palette = $this->pDataObject->getPalette();
+
+ /* Do we have an abscissa serie defined? */
+ if ( $Data["Abscissa"] == "" ) { return(PIE_NO_ABSCISSA); }
+
+ /* Try to find the data serie */
+ $DataSerie = "";
+ foreach ($Data["Series"] as $SerieName => $SerieData)
+ { if ( $SerieName != $Data["Abscissa"]) { $DataSerie = $SerieName; } }
+
+ /* Do we have data to compute? */
+ if ( $DataSerie == "" ) { return(PIE_NO_DATASERIE); }
+
+ /* Remove unused data */
+ list($Data,$Palette) = $this->clean0Values($Data,$Palette,$DataSerie,$Data["Abscissa"]);
+
+ /* Compute the pie sum */
+ $SerieSum = $this->pDataObject->getSum($DataSerie);
+
+ /* Do we have data to draw? */
+ if ( $SerieSum == 0 ) { return(PIE_SUMISNULL); }
+
+ /* Dump the real number of data to draw */
+ $Values = "";
+ foreach ($Data["Series"][$DataSerie]["Data"] as $Key => $Value)
+ { if ($Value != 0) { $Values[] = $Value; } }
+
+ /* Compute the wasted angular space between series */
+ if (count($Values)==1) { $WastedAngular = 0; } else { $WastedAngular = count($Values) * $DataGapAngle; }
+
+ /* Compute the scale */
+ $ScaleFactor = (360 - $WastedAngular) / $SerieSum;
+
+ $RestoreShadow = $this->pChartObject->Shadow;
+ if ( $this->pChartObject->Shadow ) { $this->pChartObject->Shadow = FALSE; }
+
+ /* Draw the polygon ring elements */
+ $Offset = 360; $ID = count($Values)-1;
+ $Values = array_reverse($Values);
+ $Slice = 0; $Slices = ""; $SliceColors = ""; $Visible = ""; $SliceAngle = "";
+ foreach($Values as $Key => $Value)
+ {
+ if ( !isset($Palette[$ID]["R"]) ) { $Color = $this->pChartObject->getRandomColor(); $Palette[$ID] = $Color; $this->pDataObject->savePalette($ID,$Color); }
+ $Settings = array("R"=>$Palette[$ID]["R"],"G"=>$Palette[$ID]["G"],"B"=>$Palette[$ID]["B"],"Alpha"=>$Palette[$ID]["Alpha"]);
+
+ $SliceColors[$Slice] = $Settings;
+
+ $StartAngle = $Offset;
+ $EndAngle = $Offset-($Value*$ScaleFactor); if ( $EndAngle < 0 ) { $EndAngle = 0; }
+
+ if ( $StartAngle > 180 ) { $Visible[$Slice]["Start"] = TRUE; } else { $Visible[$Slice]["Start"] = TRUE; }
+ if ( $EndAngle < 180 ) { $Visible[$Slice]["End"] = FALSE; } else { $Visible[$Slice]["End"] = TRUE; }
+
+ $Step = (360 / (2 * PI * $OuterRadius))/2;
+ $OutX1 = VOID; $OutY1 = VOID;
+ for($i=$Offset;$i>=$EndAngle;$i=$i-$Step)
+ {
+ $Xc = cos(($i-90)*PI/180) * ($OuterRadius+$DataGapRadius-2) + $X;
+ $Yc = sin(($i-90)*PI/180) * ($OuterRadius+$DataGapRadius-2)*$SkewFactor + $Y;
+ $Slices[$Slice]["AA"][] = array($Xc,$Yc);
+
+ $Xc = cos(($i-90)*PI/180) * ($OuterRadius+$DataGapRadius-1) + $X;
+ $Yc = sin(($i-90)*PI/180) * ($OuterRadius+$DataGapRadius-1)*$SkewFactor + $Y;
+ $Slices[$Slice]["AA"][] = array($Xc,$Yc);
+
+ $Xc = cos(($i-90)*PI/180) * ($OuterRadius+$DataGapRadius) + $X;
+ $Yc = sin(($i-90)*PI/180) * ($OuterRadius+$DataGapRadius)*$SkewFactor + $Y;
+ $this->pChartObject->drawAntialiasPixel($Xc,$Yc,$Settings);
+
+ if ( $OutX1 == VOID ) { $OutX1 = $Xc; $OutY1 = $Yc; }
+
+ if ( $i<90 ) { $Yc++; }
+ if ( $i>90 && $i<180 ) { $Xc++; }
+ if ( $i>180 && $i<270 ) { $Xc++; }
+ if ( $i>=270 ) { $Xc++; $Yc++; }
+
+ $Slices[$Slice]["BottomPoly"][] = floor($Xc); $Slices[$Slice]["BottomPoly"][] = floor($Yc);
+ $Slices[$Slice]["TopPoly"][] = floor($Xc); $Slices[$Slice]["TopPoly"][] = floor($Yc)-$SliceHeight;
+ $Slices[$Slice]["Angle"][] = $i;
+ }
+ $OutX2 = $Xc; $OutY2 = $Yc;
+
+ $Slices[$Slice]["Angle"][] = VOID;
+ $Lasti = $i;
+
+ $Step = (360 / (2 * PI * $InnerRadius))/2;
+ $InX1 = VOID; $InY1 = VOID;
+ for($i=$EndAngle;$i<=$Offset;$i=$i+$Step)
+ {
+ $Xc = cos(($i-90)*PI/180) * ($InnerRadius+$DataGapRadius-1) + $X;
+ $Yc = sin(($i-90)*PI/180) * ($InnerRadius+$DataGapRadius-1)*$SkewFactor + $Y;
+ $Slices[$Slice]["AA"][] = array($Xc,$Yc);
+
+ $Xc = cos(($i-90)*PI/180) * ($InnerRadius+$DataGapRadius) + $X;
+ $Yc = sin(($i-90)*PI/180) * ($InnerRadius+$DataGapRadius)*$SkewFactor + $Y;
+ $Slices[$Slice]["AA"][] = array($Xc,$Yc);
+
+ if ( $InX1 == VOID ) { $InX1 = $Xc; $InY1 = $Yc; }
+
+ if ( $i<90 ) { $Yc++; }
+ if ( $i>90 && $i<180 ) { $Xc++; }
+ if ( $i>180 && $i<270 ) { $Xc++; }
+ if ( $i>=270 ) { $Xc++; $Yc++; }
+
+ $Slices[$Slice]["BottomPoly"][] = floor($Xc); $Slices[$Slice]["BottomPoly"][] = floor($Yc);
+ $Slices[$Slice]["TopPoly"][] = floor($Xc); $Slices[$Slice]["TopPoly"][] = floor($Yc)-$SliceHeight;
+ $Slices[$Slice]["Angle"][] = $i;
+ }
+ $InX2 = $Xc; $InY2 = $Yc;
+
+ $Slices[$Slice]["InX1"] = $InX1; $Slices[$Slice]["InY1"] = $InY1;
+ $Slices[$Slice]["InX2"] = $InX2; $Slices[$Slice]["InY2"] = $InY2;
+ $Slices[$Slice]["OutX1"] = $OutX1; $Slices[$Slice]["OutY1"] = $OutY1;
+ $Slices[$Slice]["OutX2"] = $OutX2; $Slices[$Slice]["OutY2"] = $OutY2;
+
+ $Offset = $Lasti - $DataGapAngle; $ID--; $Slice++;
+ }
+
+ /* Draw the bottom pie splice */
+ foreach($Slices as $SliceID => $Plots)
+ {
+ $Settings = $SliceColors[$SliceID]; $Settings["NoBorder"] = TRUE;
+ $this->pChartObject->drawPolygon($Plots["BottomPoly"],$Settings);
+
+ foreach($Plots["AA"] as $Key => $Pos)
+ $this->pChartObject->drawAntialiasPixel($Pos[0],$Pos[1],$Settings);
+
+ $this->pChartObject->drawLine($Plots["InX1"],$Plots["InY1"],$Plots["OutX2"],$Plots["OutY2"],$Settings);
+ $this->pChartObject->drawLine($Plots["InX2"],$Plots["InY2"],$Plots["OutX1"],$Plots["OutY1"],$Settings);
+ }
+
+ $Slices = array_reverse($Slices);
+ $SliceColors = array_reverse($SliceColors);
+
+ /* Draw the vertical edges (semi-visible) */
+ foreach($Slices as $SliceID => $Plots)
+ {
+ $Settings = $SliceColors[$SliceID]; $Settings["NoBorder"] = TRUE;
+ $Settings["R"] = $Settings["R"]+$Cf; $Settings["G"] = $Settings["G"]+$Cf; $Settings["B"] = $Settings["B"]+$Cf;
+
+ $StartAngle = $Plots["Angle"][0];
+ foreach($Plots["Angle"] as $Key =>$Angle) { if ($Angle == VOID) { $EndAngle = $Plots["Angle"][$Key-1]; } }
+
+ if ( $StartAngle >= 270 || $StartAngle <= 90 )
+ $this->pChartObject->drawLine($Plots["OutX1"],$Plots["OutY1"],$Plots["OutX1"],$Plots["OutY1"]-$SliceHeight,$Settings);
+ if ( $StartAngle >= 270 || $StartAngle <= 90 )
+ $this->pChartObject->drawLine($Plots["OutX2"],$Plots["OutY2"],$Plots["OutX2"],$Plots["OutY2"]-$SliceHeight,$Settings);
+
+ $this->pChartObject->drawLine($Plots["InX1"],$Plots["InY1"],$Plots["InX1"],$Plots["InY1"]-$SliceHeight,$Settings);
+ $this->pChartObject->drawLine($Plots["InX2"],$Plots["InY2"],$Plots["InX2"],$Plots["InY2"]-$SliceHeight,$Settings);
+ }
+
+ /* Draw the inner vertical slices */
+ foreach($Slices as $SliceID => $Plots)
+ {
+ $Settings = $SliceColors[$SliceID]; $Settings["NoBorder"] = TRUE;
+ $Settings["R"] = $Settings["R"]+$Cf; $Settings["G"] = $Settings["G"]+$Cf; $Settings["B"] = $Settings["B"]+$Cf;
+
+ $Outer = TRUE; $Inner = FALSE;
+ $InnerPlotsA = ""; $InnerPlotsB = "";
+ foreach($Plots["Angle"] as $ID => $Angle)
+ {
+ if ( $Angle == VOID )
+ { $Outer = FALSE; $Inner = TRUE; }
+ elseif( $Inner )
+ {
+ if (( $Angle < 90 || $Angle > 270 ) && isset($Plots["BottomPoly"][$ID*2]) )
+ {
+ $Xo = $Plots["BottomPoly"][$ID*2];
+ $Yo = $Plots["BottomPoly"][$ID*2+1];
+
+ $InnerPlotsA[] = $Xo; $InnerPlotsA[] = $Yo;
+ $InnerPlotsB[] = $Xo; $InnerPlotsB[] = $Yo-$SliceHeight;
+ }
+ }
+ }
+
+ if ( $InnerPlotsA != "" )
+ { $InnerPlots = array_merge($InnerPlotsA,$this->arrayReverse($InnerPlotsB)); $this->pChartObject->drawPolygon($InnerPlots,$Settings); }
+ }
+
+
+ /* Draw the splice top and left poly */
+ foreach($Slices as $SliceID => $Plots)
+ {
+ $Settings = $SliceColors[$SliceID]; $Settings["NoBorder"] = TRUE;
+ $Settings["R"] = $Settings["R"]+$Cf*1.5; $Settings["G"] = $Settings["G"]+$Cf*1.5; $Settings["B"] = $Settings["B"]+$Cf*1.5;
+
+ $StartAngle = $Plots["Angle"][0];
+ foreach($Plots["Angle"] as $Key =>$Angle) { if ($Angle == VOID) { $EndAngle = $Plots["Angle"][$Key-1]; } }
+
+ if ( $StartAngle < 180 )
+ {
+ $Points = "";
+ $Points[] = $Plots["InX2"];
+ $Points[] = $Plots["InY2"];
+ $Points[] = $Plots["InX2"];
+ $Points[] = $Plots["InY2"]-$SliceHeight;
+ $Points[] = $Plots["OutX1"];
+ $Points[] = $Plots["OutY1"]-$SliceHeight;
+ $Points[] = $Plots["OutX1"];
+ $Points[] = $Plots["OutY1"];
+
+ $this->pChartObject->drawPolygon($Points,$Settings);
+ }
+
+ if ( $EndAngle > 180 )
+ {
+ $Points = "";
+ $Points[] = $Plots["InX1"];
+ $Points[] = $Plots["InY1"];
+ $Points[] = $Plots["InX1"];
+ $Points[] = $Plots["InY1"]-$SliceHeight;
+ $Points[] = $Plots["OutX2"];
+ $Points[] = $Plots["OutY2"]-$SliceHeight;
+ $Points[] = $Plots["OutX2"];
+ $Points[] = $Plots["OutY2"];
+
+ $this->pChartObject->drawPolygon($Points,$Settings);
+ }
+ }
+
+
+ /* Draw the vertical edges (visible) */
+ foreach($Slices as $SliceID => $Plots)
+ {
+ $Settings = $SliceColors[$SliceID]; $Settings["NoBorder"] = TRUE;
+ $Settings["R"] = $Settings["R"]+$Cf; $Settings["G"] = $Settings["G"]+$Cf; $Settings["B"] = $Settings["B"]+$Cf;
+
+ $StartAngle = $Plots["Angle"][0];
+ foreach($Plots["Angle"] as $Key =>$Angle) { if ($Angle == VOID) { $EndAngle = $Plots["Angle"][$Key-1]; } }
+
+ if ( $StartAngle <= 270 && $StartAngle >= 90 )
+ $this->pChartObject->drawLine($Plots["OutX1"],$Plots["OutY1"],$Plots["OutX1"],$Plots["OutY1"]-$SliceHeight,$Settings);
+ if ( $EndAngle <= 270 && $EndAngle >= 90 )
+ $this->pChartObject->drawLine($Plots["OutX2"],$Plots["OutY2"],$Plots["OutX2"],$Plots["OutY2"]-$SliceHeight,$Settings);
+ }
+
+
+ /* Draw the outer vertical slices */
+ foreach($Slices as $SliceID => $Plots)
+ {
+ $Settings = $SliceColors[$SliceID]; $Settings["NoBorder"] = TRUE;
+ $Settings["R"] = $Settings["R"]+$Cf; $Settings["G"] = $Settings["G"]+$Cf; $Settings["B"] = $Settings["B"]+$Cf;
+
+ $Outer = TRUE; $Inner = FALSE;
+ $OuterPlotsA = ""; $OuterPlotsB = ""; $InnerPlotsA = ""; $InnerPlotsB = "";
+ foreach($Plots["Angle"] as $ID => $Angle)
+ {
+ if ( $Angle == VOID )
+ { $Outer = FALSE; $Inner = TRUE; }
+ elseif( $Outer )
+ {
+ if ( ( $Angle > 90 && $Angle < 270 ) && isset($Plots["BottomPoly"][$ID*2]) )
+ {
+ $Xo = $Plots["BottomPoly"][$ID*2];
+ $Yo = $Plots["BottomPoly"][$ID*2+1];
+
+ $OuterPlotsA[] = $Xo; $OuterPlotsA[] = $Yo;
+ $OuterPlotsB[] = $Xo; $OuterPlotsB[] = $Yo-$SliceHeight;
+ }
+ }
+ }
+ if ( $OuterPlotsA != "" )
+ { $OuterPlots = array_merge($OuterPlotsA,$this->arrayReverse($OuterPlotsB)); $this->pChartObject->drawPolygon($OuterPlots,$Settings); }
+ }
+
+ $Slices = array_reverse($Slices);
+ $SliceColors = array_reverse($SliceColors);
+
+
+ /* Draw the top pie splice */
+ foreach($Slices as $SliceID => $Plots)
+ {
+ $Settings = $SliceColors[$SliceID]; $Settings["NoBorder"] = TRUE;
+ $Settings["R"] = $Settings["R"]+$Cf*2; $Settings["G"] = $Settings["G"]+$Cf*2; $Settings["B"] = $Settings["B"]+$Cf*2;
+
+ $this->pChartObject->drawPolygon($Plots["TopPoly"],$Settings);
+
+//print_r($Data["Series"][$Data["Abscissa"]]["Data"]);
+//exit();
+ if ( $RecordImageMap ) { $this->pChartObject->addToImageMap("POLY",$this->arraySerialize($Plots["TopPoly"]),$this->pChartObject->toHTMLColor($Settings["R"],$Settings["G"],$Settings["B"]),$Data["Series"][$Data["Abscissa"]]["Data"][$SliceID],$Data["Series"][$DataSerie]["Data"][count($Slices)-$SliceID-1]); }
+
+ foreach($Plots["AA"] as $Key => $Pos)
+ $this->pChartObject->drawAntialiasPixel($Pos[0],$Pos[1]-$SliceHeight,$Settings);
+
+ $this->pChartObject->drawLine($Plots["InX1"],$Plots["InY1"]-$SliceHeight,$Plots["OutX2"],$Plots["OutY2"]-$SliceHeight,$Settings);
+ $this->pChartObject->drawLine($Plots["InX2"],$Plots["InY2"]-$SliceHeight,$Plots["OutX1"],$Plots["OutY1"]-$SliceHeight,$Settings);
+ }
+
+ if ( $DrawLabels )
+ {
+ $Offset = 360;
+ foreach($Values as $Key => $Value)
+ {
+ $StartAngle = $Offset;
+ $EndAngle = $Offset-($Value*$ScaleFactor); if ( $EndAngle < 0 ) { $EndAngle = 0; }
+
+ if ( $LabelColor == PIE_LABEL_COLOR_AUTO )
+ { $Settings = array("FillR"=>$Palette[$ID]["R"],"FillG"=>$Palette[$ID]["G"],"FillB"=>$Palette[$ID]["B"],"Alpha"=>$Palette[$ID]["Alpha"]);}
+ else
+ { $Settings = array("FillR"=>$LabelR,"FillG"=>$LabelG,"FillB"=>$LabelB,"Alpha"=>$LabelAlpha); }
+
+ $Angle = ($EndAngle - $Offset)/2 + $Offset;
+ $Xc = cos(($Angle-90)*PI/180) * ($OuterRadius+$DataGapRadius) + $X;
+ $Yc = sin(($Angle-90)*PI/180) * ($OuterRadius+$DataGapRadius)*$SkewFactor + $Y;
+
+ $Label = $Data["Series"][$Data["Abscissa"]]["Data"][$Key];
+
+ if ( $LabelStacked )
+ $this->writePieLabel($Xc,$Yc-$SliceHeight,$Label,$Angle,$Settings,TRUE,$X,$Y,$OuterRadius);
+ else
+ $this->writePieLabel($Xc,$Yc-$SliceHeight,$Label,$Angle,$Settings,FALSE);
+
+ $Offset = $EndAngle - $DataGapAngle; $ID--; $Slice++;
+ }
+ }
+ if ( $DrawLabels && $LabelStacked ) { $this->writeShiftedLabels(); }
+
+ $this->pChartObject->Shadow = $RestoreShadow;
+
+ return(PIE_RENDERED);
+ }
+
+ /* Serialize an array */
+ function arraySerialize($Data)
+ {
+ $Result = "";
+ foreach($Data as $Key => $Value)
+ { if ($Result == "") { $Result = floor($Value); } else { $Result = $Result.",".floor($Value); } }
+
+ return($Result);
+ }
+
+ /* Reverse an array */
+ function arrayReverse($Plots)
+ {
+ $Result = "";
+
+ for($i=count($Plots)-1;$i>=0;$i=$i-2)
+ { $Result[] = $Plots[$i-1]; $Result[] = $Plots[$i]; }
+
+ return($Result);
+ }
+
+ /* Remove unused series & values */
+ function clean0Values($Data,$Palette,$DataSerie,$AbscissaSerie)
+ {
+ $NewPalette = ""; $NewData = ""; $NewAbscissa = "";
+
+ /* Remove unused series */
+ foreach($Data["Series"] as $SerieName => $SerieSettings)
+ { if ( $SerieName != $DataSerie && $SerieName != $AbscissaSerie ) { unset($Data["Series"][$SerieName]); } }
+
+ /* Remove NULL values */
+ foreach($Data["Series"][$DataSerie]["Data"] as $Key => $Value)
+ {
+ if ($Value != 0 )
+ {
+ $NewData[] = $Value;
+ $NewAbscissa[] = $Data["Series"][$AbscissaSerie]["Data"][$Key];
+ if ( isset($Palette[$Key]) ) { $NewPalette[] = $Palette[$Key]; }
+ }
+ }
+ $Data["Series"][$DataSerie]["Data"] = $NewData;
+ $Data["Series"][$AbscissaSerie]["Data"] = $NewAbscissa;
+
+ return(array($Data,$NewPalette));
+ }
+ }
+?> \ No newline at end of file
diff --git a/For Weekly Test/tricode/class/pRadar.class.php b/For Weekly Test/tricode/class/pRadar.class.php
new file mode 100644
index 0000000..6235c99
--- /dev/null
+++ b/For Weekly Test/tricode/class/pRadar.class.php
@@ -0,0 +1,669 @@
+<?php
+ /*
+ pRadar - class to draw radar charts
+
+ Version : 2.1.2
+ Made by : Jean-Damien POGOLOTTI
+ Last Update : 03/08/11
+
+ This file can be distributed under the license you can find at :
+
+ http://www.pchart.net/license
+
+ You can find the whole class documentation on the pChart web site.
+ */
+
+ define("SEGMENT_HEIGHT_AUTO" , 690001);
+
+ define("RADAR_LAYOUT_STAR" , 690011);
+ define("RADAR_LAYOUT_CIRCLE" , 690012);
+
+ define("RADAR_LABELS_ROTATED" , 690021);
+ define("RADAR_LABELS_HORIZONTAL" , 690022);
+
+ /* pRadar class definition */
+ class pRadar
+ {
+ var $pChartObject;
+
+ /* Class creator */
+ function pRadar()
+ { }
+
+ /* Draw a radar chart */
+ function drawRadar($Object,$Values,$Format="")
+ {
+ $this->pChartObject = $Object;
+
+ $AxisR = isset($Format["AxisR"]) ? $Format["AxisR"] : 60;
+ $AxisG = isset($Format["AxisG"]) ? $Format["AxisG"] : 60;
+ $AxisB = isset($Format["AxisB"]) ? $Format["AxisB"] : 60;
+ $AxisAlpha = isset($Format["AxisAlpha"]) ? $Format["AxisAlpha"] : 50;
+ $AxisRotation = isset($Format["AxisRotation"]) ? $Format["AxisRotation"] : 0;
+ $DrawTicks = isset($Format["DrawTicks"]) ? $Format["DrawTicks"] : TRUE;
+ $TicksLength = isset($Format["TicksLength"]) ? $Format["TicksLength"] : 2;
+ $DrawAxisValues = isset($Format["DrawAxisValues"]) ? $Format["DrawAxisValues"] : TRUE;
+ $AxisBoxRounded = isset($Format["AxisBoxRounded"]) ? $Format["AxisBoxRounded"] : TRUE;
+ $AxisFontName = isset($Format["AxisFontName"]) ? $Format["AxisFontName"] : $this->pChartObject->FontName;
+ $AxisFontSize = isset($Format["AxisFontSize"]) ? $Format["AxisFontSize"] : $this->pChartObject->FontSize;
+ $WriteValues = isset($Format["WriteValues"]) ? $Format["WriteValues"] : FALSE;
+ $WriteValuesInBubble = isset($Format["WriteValuesInBubble"]) ? $Format["WriteValuesInBubble"] : TRUE;
+ $ValueFontName = isset($Format["ValueFontName"]) ? $Format["ValueFontName"] : $this->pChartObject->FontName;
+ $ValueFontSize = isset($Format["ValueFontSize"]) ? $Format["ValueFontSize"] : $this->pChartObject->FontSize;
+ $ValuePadding = isset($Format["ValuePadding"]) ? $Format["ValuePadding"] : 4;
+ $OuterBubbleRadius = isset($Format["OuterBubbleRadius"]) ? $Format["OuterBubbleRadius"] : 2;
+ $OuterBubbleR = isset($Format["OuterBubbleR"]) ? $Format["OuterBubbleR"] : VOID;
+ $OuterBubbleG = isset($Format["OuterBubbleG"]) ? $Format["OuterBubbleG"] : VOID;
+ $OuterBubbleB = isset($Format["OuterBubbleB"]) ? $Format["OuterBubbleB"] : VOID;
+ $OuterBubbleAlpha = isset($Format["OuterBubbleAlpha"]) ? $Format["OuterBubbleAlpha"] : 100;
+ $InnerBubbleR = isset($Format["InnerBubbleR"]) ? $Format["InnerBubbleR"] : 255;
+ $InnerBubbleG = isset($Format["InnerBubbleG"]) ? $Format["InnerBubbleG"] : 255;
+ $InnerBubbleB = isset($Format["InnerBubbleB"]) ? $Format["InnerBubbleB"] : 255;
+ $InnerBubbleAlpha = isset($Format["InnerBubbleAlpha"]) ? $Format["InnerBubbleAlpha"] : 100;
+ $DrawBackground = isset($Format["DrawBackground"]) ? $Format["DrawBackground"] : TRUE;
+ $BackgroundR = isset($Format["BackgroundR"]) ? $Format["BackgroundR"] : 255;
+ $BackgroundG = isset($Format["BackgroundG"]) ? $Format["BackgroundG"] : 255;
+ $BackgroundB = isset($Format["BackgroundB"]) ? $Format["BackgroundB"] : 255;
+ $BackgroundAlpha = isset($Format["BackgroundAlpha"]) ? $Format["BackgroundAlpha"] : 50;
+ $BackgroundGradient= isset($Format["BackgroundGradient"]) ? $Format["BackgroundGradient"] : NULL;
+ $Layout = isset($Format["Layout"]) ? $Format["Layout"] : RADAR_LAYOUT_STAR;
+ $SegmentHeight = isset($Format["SegmentHeight"]) ? $Format["SegmentHeight"] : SEGMENT_HEIGHT_AUTO;
+ $Segments = isset($Format["Segments"]) ? $Format["Segments"] : 4;
+ $WriteLabels = isset($Format["WriteLabels"]) ? $Format["WriteLabels"] : TRUE;
+ $SkipLabels = isset($Format["SkipLabels"]) ? $Format["SkipLabels"] : 1;
+ $LabelMiddle = isset($Format["LabelMiddle"]) ? $Format["LabelMiddle"] : FALSE;
+ $LabelsBackground = isset($Format["LabelsBackground"]) ? $Format["LabelsBackground"] : TRUE;
+ $LabelsBGR = isset($Format["LabelsBGR"]) ? $Format["LabelsBGR"] : 255;
+ $LabelsBGG = isset($Format["LabelsBGR"]) ? $Format["LabelsBGG"] : 255;
+ $LabelsBGB = isset($Format["LabelsBGR"]) ? $Format["LabelsBGB"] : 255;
+ $LabelsBGAlpha = isset($Format["LabelsBGAlpha"]) ? $Format["LabelsBGAlpha"] : 50;
+ $LabelPos = isset($Format["LabelPos"]) ? $Format["LabelPos"] : RADAR_LABELS_ROTATED;
+ $LabelPadding = isset($Format["LabelPadding"]) ? $Format["LabelPadding"] : 4;
+ $DrawPoints = isset($Format["DrawPoints"]) ? $Format["DrawPoints"] : TRUE;
+ $PointRadius = isset($Format["PointRadius"]) ? $Format["PointRadius"] : 4;
+ $PointSurrounding = isset($Format["PointRadius"]) ? $Format["PointRadius"] : -30;
+ $DrawLines = isset($Format["DrawLines"]) ? $Format["DrawLines"] : TRUE;
+ $LineLoopStart = isset($Format["LineLoopStart"]) ? $Format["LineLoopStart"] : TRUE;
+ $DrawPoly = isset($Format["DrawPoly"]) ? $Format["DrawPoly"] : FALSE;
+ $PolyAlpha = isset($Format["PolyAlpha"]) ? $Format["PolyAlpha"] : 40;
+ $FontSize = $Object->FontSize;
+ $X1 = $Object->GraphAreaX1;
+ $Y1 = $Object->GraphAreaY1;
+ $X2 = $Object->GraphAreaX2;
+ $Y2 = $Object->GraphAreaY2;
+ $RecordImageMap = isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE;
+
+ /* Cancel default tick length if ticks not enabled */
+ if ( $DrawTicks == FALSE ) { $TicksLength = 0; }
+
+ /* Data Processing */
+ $Data = $Values->getData();
+ $Palette = $Values->getPalette();
+
+ /* Catch the number of required axis */
+ $LabelSerie = $Data["Abscissa"];
+ if ( $LabelSerie != "" )
+ { $Points = count($Data["Series"][$LabelSerie]["Data"]); }
+ else
+ {
+ $Points = 0;
+ foreach($Data["Series"] as $SerieName => $DataArray)
+ { if ( count($DataArray["Data"]) > $Points ) { $Points = count($DataArray["Data"]); } }
+ }
+
+ /* Draw the axis */
+ $CenterX = ($X2-$X1)/2 + $X1;
+ $CenterY = ($Y2-$Y1)/2 + $Y1;
+
+ $EdgeHeight = min(($X2-$X1)/2,($Y2-$Y1)/2);
+ if ( $WriteLabels )
+ $EdgeHeight = $EdgeHeight - $FontSize - $LabelPadding - $TicksLength;
+
+ /* Determine the scale if set to automatic */
+ if ( $SegmentHeight == SEGMENT_HEIGHT_AUTO)
+ {
+ $Max = 0;
+ foreach($Data["Series"] as $SerieName => $DataArray)
+ {
+ if ( $SerieName != $LabelSerie )
+ {
+ if ( max($DataArray["Data"]) > $Max ) { $Max = max($DataArray["Data"]); }
+ }
+ }
+ $MaxSegments = $EdgeHeight/20;
+ $Scale = $Object->computeScale(0,$Max,$MaxSegments,array(1,2,5));
+
+ $Segments = $Scale["Rows"];
+ $SegmentHeight = $Scale["RowHeight"];
+ }
+
+ if ( $LabelMiddle && $SkipLabels == 1 )
+ { $Axisoffset = (360/$Points)/2; }
+ elseif ( $LabelMiddle && $SkipLabels != 1 )
+ { $Axisoffset = (360/($Points/$SkipLabels))/2; }
+ elseif ( !$LabelMiddle )
+ { $Axisoffset = 0; }
+
+ /* Background processing */
+ if ( $DrawBackground )
+ {
+ $RestoreShadow = $Object->Shadow;
+ $Object->Shadow = FALSE;
+
+ if ($BackgroundGradient == NULL)
+ {
+ if ( $Layout == RADAR_LAYOUT_STAR )
+ {
+ $Color = array("R"=>$BackgroundR,"G"=>$BackgroundG,"B"=>$BackgroundB,"Alpha"=>$BackgroundAlpha);
+ $PointArray = "";
+ for($i=0;$i<=360;$i=$i+(360/$Points))
+ {
+ $PointArray[] = cos(deg2rad($i+$AxisRotation)) * $EdgeHeight + $CenterX;
+ $PointArray[] = sin(deg2rad($i+$AxisRotation)) * $EdgeHeight + $CenterY;
+ }
+ $Object->drawPolygon($PointArray,$Color);
+ }
+ elseif ( $Layout == RADAR_LAYOUT_CIRCLE )
+ {
+ $Color = array("R"=>$BackgroundR,"G"=>$BackgroundG,"B"=>$BackgroundB,"Alpha"=>$BackgroundAlpha);
+ $Object->drawFilledCircle($CenterX,$CenterY,$EdgeHeight,$Color);
+ }
+ }
+ else
+ {
+ $GradientROffset = ($BackgroundGradient["EndR"] - $BackgroundGradient["StartR"]) / $Segments;
+ $GradientGOffset = ($BackgroundGradient["EndG"] - $BackgroundGradient["StartG"]) / $Segments;
+ $GradientBOffset = ($BackgroundGradient["EndB"] - $BackgroundGradient["StartB"]) / $Segments;
+ $GradientAlphaOffset = ($BackgroundGradient["EndAlpha"] - $BackgroundGradient["StartAlpha"]) / $Segments;
+
+ if ( $Layout == RADAR_LAYOUT_STAR )
+ {
+ for($j=$Segments;$j>=1;$j--)
+ {
+ $Color = array("R"=>$BackgroundGradient["StartR"]+$GradientROffset*$j,"G"=>$BackgroundGradient["StartG"]+$GradientGOffset*$j,"B"=>$BackgroundGradient["StartB"]+$GradientBOffset*$j,"Alpha"=>$BackgroundGradient["StartAlpha"]+$GradientAlphaOffset*$j);
+ $PointArray = "";
+
+ for($i=0;$i<=360;$i=$i+(360/$Points))
+ {
+ $PointArray[] = cos(deg2rad($i+$AxisRotation)) * ($EdgeHeight/$Segments)*$j + $CenterX;
+ $PointArray[] = sin(deg2rad($i+$AxisRotation)) * ($EdgeHeight/$Segments)*$j + $CenterY;
+ }
+ $Object->drawPolygon($PointArray,$Color);
+ }
+ }
+ elseif ( $Layout == RADAR_LAYOUT_CIRCLE )
+ {
+ for($j=$Segments;$j>=1;$j--)
+ {
+ $Color = array("R"=>$BackgroundGradient["StartR"]+$GradientROffset*$j,"G"=>$BackgroundGradient["StartG"]+$GradientGOffset*$j,"B"=>$BackgroundGradient["StartB"]+$GradientBOffset*$j,"Alpha"=>$BackgroundGradient["StartAlpha"]+$GradientAlphaOffset*$j);
+ $Object->drawFilledCircle($CenterX,$CenterY,($EdgeHeight/$Segments)*$j,$Color);
+ }
+ }
+ }
+ $Object->Shadow = $RestoreShadow;
+ }
+
+ /* Axis to axis lines */
+ $Color = array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha);
+ $ColorDotted = array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha*.8, "Ticks"=>2);
+ if ( $Layout == RADAR_LAYOUT_STAR )
+ {
+ for($j=1;$j<=$Segments;$j++)
+ {
+ for($i=0;$i<360;$i=$i+(360/$Points))
+ {
+ $EdgeX1 = cos(deg2rad($i+$AxisRotation)) * ($EdgeHeight/$Segments)*$j + $CenterX;
+ $EdgeY1 = sin(deg2rad($i+$AxisRotation)) * ($EdgeHeight/$Segments)*$j + $CenterY;
+ $EdgeX2 = cos(deg2rad($i+$AxisRotation+(360/$Points))) * ($EdgeHeight/$Segments)*$j + $CenterX;
+ $EdgeY2 = sin(deg2rad($i+$AxisRotation+(360/$Points))) * ($EdgeHeight/$Segments)*$j + $CenterY;
+
+ $Object->drawLine($EdgeX1,$EdgeY1,$EdgeX2,$EdgeY2,$Color);
+ }
+ }
+ }
+ elseif ( $Layout == RADAR_LAYOUT_CIRCLE )
+ {
+ for($j=1;$j<=$Segments;$j++)
+ {
+ $Radius = ($EdgeHeight/$Segments)*$j;
+ $Object->drawCircle($CenterX,$CenterY,$Radius,$Radius,$Color);
+ }
+ }
+
+ if ( $DrawAxisValues )
+ {
+ if ( $LabelsBackground )
+ $Options = array("DrawBox"=>TRUE, "Align"=>TEXT_ALIGN_MIDDLEMIDDLE,"BoxR"=>$LabelsBGR,"BoxG"=>$LabelsBGG,"BoxB"=>$LabelsBGB,"BoxAlpha"=>$LabelsBGAlpha);
+ else
+ $Options = array("Align"=>TEXT_ALIGN_MIDDLEMIDDLE);
+
+ if ( $AxisBoxRounded ) { $Options["BoxRounded"] = TRUE; }
+
+ $Options["FontName"] = $AxisFontName;
+ $Options["FontSize"] = $AxisFontSize;
+
+ $Angle = 360 / ($Points*2);
+ for($j=1;$j<=$Segments;$j++)
+ {
+ $Label = $j * $SegmentHeight;
+
+ if ( $Layout == RADAR_LAYOUT_CIRCLE )
+ {
+ $EdgeX1 = cos(deg2rad($Angle+$AxisRotation)) * ($EdgeHeight/$Segments)*$j + $CenterX;
+ $EdgeY1 = sin(deg2rad($Angle+$AxisRotation)) * ($EdgeHeight/$Segments)*$j + $CenterY;
+ }
+ elseif ( $Layout == RADAR_LAYOUT_STAR )
+ {
+ $EdgeX1 = cos(deg2rad($AxisRotation)) * ($EdgeHeight/$Segments)*$j + $CenterX;
+ $EdgeY1 = sin(deg2rad($AxisRotation)) * ($EdgeHeight/$Segments)*$j + $CenterY;
+ $EdgeX2 = cos(deg2rad((360 / $Points) + $AxisRotation)) * ($EdgeHeight/$Segments)*$j + $CenterX;
+ $EdgeY2 = sin(deg2rad((360 / $Points) + $AxisRotation)) * ($EdgeHeight/$Segments)*$j + $CenterY;
+
+ $EdgeX1 = ($EdgeX2 - $EdgeX1)/2 + $EdgeX1;
+ $EdgeY1 = ($EdgeY2 - $EdgeY1)/2 + $EdgeY1;
+ }
+
+ $Object->drawText($EdgeX1,$EdgeY1,$Label,$Options);
+ }
+ }
+
+ /* Axis lines */
+ $ID = 0;
+ for($i=0;$i<360;$i=$i+(360/$Points))
+ {
+ $EdgeX = cos(deg2rad($i+$AxisRotation)) * ($EdgeHeight+$TicksLength) + $CenterX;
+ $EdgeY = sin(deg2rad($i+$AxisRotation)) * ($EdgeHeight+$TicksLength) + $CenterY;
+
+ if ($ID % $SkipLabels == 0)
+ { $Object->drawLine($CenterX,$CenterY,$EdgeX,$EdgeY,$Color); }
+ else
+ { $Object->drawLine($CenterX,$CenterY,$EdgeX,$EdgeY,$ColorDotted); }
+
+ if ( $WriteLabels )
+ {
+ $LabelX = cos(deg2rad($i+$AxisRotation+$Axisoffset)) * ($EdgeHeight+$LabelPadding+$TicksLength) + $CenterX;
+ $LabelY = sin(deg2rad($i+$AxisRotation+$Axisoffset)) * ($EdgeHeight+$LabelPadding+$TicksLength) + $CenterY;
+
+ if ( $LabelSerie != "" )
+ { $Label = isset($Data["Series"][$LabelSerie]["Data"][$ID]) ? $Data["Series"][$LabelSerie]["Data"][$ID] : ""; }
+ else
+ $Label = $ID;
+
+ if ($ID % $SkipLabels == 0)
+ {
+ if ( $LabelPos == RADAR_LABELS_ROTATED )
+ $Object->drawText($LabelX,$LabelY,$Label,array("Angle"=>(360-($i+$AxisRotation+$Axisoffset))-90,"Align"=>TEXT_ALIGN_BOTTOMMIDDLE));
+ else
+ {
+ if ( (floor($LabelX) == floor($CenterX)) && (floor($LabelY) < floor($CenterY)) ) { $Object->drawText($LabelX,$LabelY,$Label,array("Align"=>TEXT_ALIGN_BOTTOMMIDDLE)); }
+ if ( (floor($LabelX) > floor($CenterX)) && (floor($LabelY) < floor($CenterY)) ) { $Object->drawText($LabelX,$LabelY,$Label,array("Align"=>TEXT_ALIGN_BOTTOMLEFT)); }
+ if ( (floor($LabelX) > floor($CenterX)) && (floor($LabelY) == floor($CenterY)) ) { $Object->drawText($LabelX,$LabelY,$Label,array("Align"=>TEXT_ALIGN_MIDDLELEFT)); }
+ if ( (floor($LabelX) > floor($CenterX)) && (floor($LabelY) > floor($CenterY)) ) { $Object->drawText($LabelX,$LabelY,$Label,array("Align"=>TEXT_ALIGN_TOPLEFT)); }
+ if ( (floor($LabelX) < floor($CenterX)) && (floor($LabelY) < floor($CenterY)) ) { $Object->drawText($LabelX,$LabelY,$Label,array("Align"=>TEXT_ALIGN_BOTTOMRIGHT)); }
+ if ( (floor($LabelX) < floor($CenterX)) && (floor($LabelY) == floor($CenterY)) ) { $Object->drawText($LabelX,$LabelY,$Label,array("Align"=>TEXT_ALIGN_MIDDLERIGHT)); }
+ if ( (floor($LabelX) < floor($CenterX)) && (floor($LabelY) > floor($CenterY)) ) { $Object->drawText($LabelX,$LabelY,$Label,array("Align"=>TEXT_ALIGN_TOPRIGHT)); }
+ if ( (floor($LabelX) == floor($CenterX)) && (floor($LabelY) > floor($CenterY)) ) { $Object->drawText($LabelX,$LabelY,$Label,array("Align"=>TEXT_ALIGN_TOPMIDDLE)); }
+ }
+ }
+ }
+ $ID++;
+ }
+
+ /* Compute the plots position */
+ $ID = 0; $Plot = "";
+ foreach($Data["Series"] as $SerieName => $DataS)
+ {
+ if ( $SerieName != $LabelSerie )
+ {
+ $Color = array("R"=>$Palette[$ID]["R"],"G"=>$Palette[$ID]["G"],"B"=>$Palette[$ID]["B"],"Alpha"=>$Palette[$ID]["Alpha"],"Surrounding"=>$PointSurrounding);
+ foreach($DataS["Data"] as $Key => $Value)
+ {
+ $Angle = (360/$Points) * $Key;
+ $Length = ($EdgeHeight/($Segments*$SegmentHeight))*$Value;
+
+ $X = cos(deg2rad($Angle+$AxisRotation)) * $Length + $CenterX;
+ $Y = sin(deg2rad($Angle+$AxisRotation)) * $Length + $CenterY;
+
+ $Plot[$ID][] = array($X,$Y,$Value);
+
+ if ( $RecordImageMap ) { $this->pChartObject->addToImageMap("CIRCLE",floor($X).",".floor($Y).",".floor($PointRadius),$this->pChartObject->toHTMLColor($Palette[$ID]["R"],$Palette[$ID]["G"],$Palette[$ID]["B"]),$DataS["Description"],$Data["Series"][$LabelSerie]["Data"][$Key]." = ".$Value); }
+ }
+ $ID++;
+ }
+ }
+
+ /* Draw all that stuff! */
+ foreach($Plot as $ID => $Points)
+ {
+ $Color = array("R"=>$Palette[$ID]["R"],"G"=>$Palette[$ID]["G"],"B"=>$Palette[$ID]["B"],"Alpha"=>$Palette[$ID]["Alpha"],"Surrounding"=>$PointSurrounding);
+
+ /* Draw the polygons */
+ if ( $DrawPoly )
+ {
+ if ($PolyAlpha != NULL)
+ $Color = array("R"=>$Palette[$ID]["R"],"G"=>$Palette[$ID]["G"],"B"=>$Palette[$ID]["B"],"Alpha"=>$PolyAlpha,"Surrounding"=>$PointSurrounding);
+
+ $PointsArray = "";
+ for($i=0; $i<count($Points);$i++)
+ { $PointsArray[] = $Points[$i][0]; $PointsArray[] = $Points[$i][1]; }
+ $Object->drawPolygon($PointsArray,$Color);
+ }
+
+ $Color = array("R"=>$Palette[$ID]["R"],"G"=>$Palette[$ID]["G"],"B"=>$Palette[$ID]["B"],"Alpha"=>$Palette[$ID]["Alpha"],"Surrounding"=>$PointSurrounding);
+
+ /* Bubble and labels settings */
+ $TextSettings = array("Align"=>TEXT_ALIGN_MIDDLEMIDDLE,"FontName"=>$ValueFontName,"FontSize"=>$ValueFontSize,"R"=>$Palette[$ID]["R"],"G"=>$Palette[$ID]["G"],"B"=>$Palette[$ID]["B"]);
+ $InnerColor = array("R"=>$InnerBubbleR,"G"=>$InnerBubbleG,"B"=>$InnerBubbleB,"Alpha"=>$InnerBubbleAlpha);
+ if ( $OuterBubbleR != VOID )
+ $OuterColor = array("R"=>$OuterBubbleR,"G"=>$OuterBubbleG,"B"=>$OuterBubbleB,"Alpha"=>$OuterBubbleAlpha);
+ else
+ $OuterColor = array("R"=>$Palette[$ID]["R"]+20,"G"=>$Palette[$ID]["G"]+20,"B"=>$Palette[$ID]["B"]+20,"Alpha"=>$Palette[$ID]["Alpha"]);
+
+ /* Loop to the starting points if asked */
+ if ( $LineLoopStart && $DrawLines )
+ $Object->drawLine($Points[count($Points)-1][0],$Points[count($Points)-1][1],$Points[0][0],$Points[0][1],$Color);
+
+ /* Draw the lines & points */
+ for($i=0; $i<count($Points);$i++)
+ {
+ if ( $DrawLines && $i < count($Points)-1)
+ $Object->drawLine($Points[$i][0],$Points[$i][1],$Points[$i+1][0],$Points[$i+1][1],$Color);
+
+ if ( $DrawPoints )
+ $Object->drawFilledCircle($Points[$i][0],$Points[$i][1],$PointRadius,$Color);
+
+ if ( $WriteValuesInBubble && $WriteValues )
+ {
+ $TxtPos = $this->pChartObject->getTextBox($Points[$i][0],$Points[$i][1],$ValueFontName,$ValueFontSize,0,$Points[$i][2]);
+ $Radius = floor(($TxtPos[1]["X"] - $TxtPos[0]["X"] + $ValuePadding*2)/2);
+
+ $this->pChartObject->drawFilledCircle($Points[$i][0],$Points[$i][1],$Radius+$OuterBubbleRadius,$OuterColor);
+ $this->pChartObject->drawFilledCircle($Points[$i][0],$Points[$i][1],$Radius,$InnerColor);
+ }
+
+ if ( $WriteValues )
+ $this->pChartObject->drawText($Points[$i][0]-1,$Points[$i][1]-1,$Points[$i][2],$TextSettings);
+ }
+ }
+ }
+
+
+
+ /* Draw a radar chart */
+ function drawPolar($Object,$Values,$Format="")
+ {
+ $this->pChartObject = $Object;
+
+ $AxisR = isset($Format["AxisR"]) ? $Format["AxisR"] : 60;
+ $AxisG = isset($Format["AxisG"]) ? $Format["AxisG"] : 60;
+ $AxisB = isset($Format["AxisB"]) ? $Format["AxisB"] : 60;
+ $AxisAlpha = isset($Format["AxisAlpha"]) ? $Format["AxisAlpha"] : 50;
+ $AxisRotation = isset($Format["AxisRotation"]) ? $Format["AxisRotation"] : -90;
+ $DrawTicks = isset($Format["DrawTicks"]) ? $Format["DrawTicks"] : TRUE;
+ $TicksLength = isset($Format["TicksLength"]) ? $Format["TicksLength"] : 2;
+ $DrawAxisValues = isset($Format["DrawAxisValues"]) ? $Format["DrawAxisValues"] : TRUE;
+ $AxisBoxRounded = isset($Format["AxisBoxRounded"]) ? $Format["AxisBoxRounded"] : TRUE;
+ $AxisFontName = isset($Format["FontName"]) ? $Format["FontName"] : $this->pChartObject->FontName;
+ $AxisFontSize = isset($Format["FontSize"]) ? $Format["FontSize"] : $this->pChartObject->FontSize;
+ $WriteValues = isset($Format["WriteValues"]) ? $Format["WriteValues"] : FALSE;
+ $WriteValuesInBubble = isset($Format["WriteValuesInBubble"]) ? $Format["WriteValuesInBubble"] : TRUE;
+ $ValueFontName = isset($Format["ValueFontName"]) ? $Format["ValueFontName"] : $this->pChartObject->FontName;
+ $ValueFontSize = isset($Format["ValueFontSize"]) ? $Format["ValueFontSize"] : $this->pChartObject->FontSize;
+ $ValuePadding = isset($Format["ValuePadding"]) ? $Format["ValuePadding"] : 4;
+ $OuterBubbleRadius = isset($Format["OuterBubbleRadius"]) ? $Format["OuterBubbleRadius"] : 2;
+ $OuterBubbleR = isset($Format["OuterBubbleR"]) ? $Format["OuterBubbleR"] : VOID;
+ $OuterBubbleG = isset($Format["OuterBubbleG"]) ? $Format["OuterBubbleG"] : VOID;
+ $OuterBubbleB = isset($Format["OuterBubbleB"]) ? $Format["OuterBubbleB"] : VOID;
+ $OuterBubbleAlpha = isset($Format["OuterBubbleAlpha"]) ? $Format["OuterBubbleAlpha"] : 100;
+ $InnerBubbleR = isset($Format["InnerBubbleR"]) ? $Format["InnerBubbleR"] : 255;
+ $InnerBubbleG = isset($Format["InnerBubbleG"]) ? $Format["InnerBubbleG"] : 255;
+ $InnerBubbleB = isset($Format["InnerBubbleB"]) ? $Format["InnerBubbleB"] : 255;
+ $InnerBubbleAlpha = isset($Format["InnerBubbleAlpha"]) ? $Format["InnerBubbleAlpha"] : 100;
+ $DrawBackground = isset($Format["DrawBackground"]) ? $Format["DrawBackground"] : TRUE;
+ $BackgroundR = isset($Format["BackgroundR"]) ? $Format["BackgroundR"] : 255;
+ $BackgroundG = isset($Format["BackgroundG"]) ? $Format["BackgroundG"] : 255;
+ $BackgroundB = isset($Format["BackgroundB"]) ? $Format["BackgroundB"] : 255;
+ $BackgroundAlpha = isset($Format["BackgroundAlpha"]) ? $Format["BackgroundAlpha"] : 50;
+ $BackgroundGradient= isset($Format["BackgroundGradient"]) ? $Format["BackgroundGradient"] : NULL;
+ $AxisSteps = isset($Format["AxisSteps"]) ? $Format["AxisSteps"] : 20;
+ $SegmentHeight = isset($Format["SegmentHeight"]) ? $Format["SegmentHeight"] : SEGMENT_HEIGHT_AUTO;
+ $Segments = isset($Format["Segments"]) ? $Format["Segments"] : 4;
+ $WriteLabels = isset($Format["WriteLabels"]) ? $Format["WriteLabels"] : TRUE;
+ $LabelsBackground = isset($Format["LabelsBackground"]) ? $Format["LabelsBackground"] : TRUE;
+ $LabelsBGR = isset($Format["LabelsBGR"]) ? $Format["LabelsBGR"] : 255;
+ $LabelsBGG = isset($Format["LabelsBGR"]) ? $Format["LabelsBGG"] : 255;
+ $LabelsBGB = isset($Format["LabelsBGR"]) ? $Format["LabelsBGB"] : 255;
+ $LabelsBGAlpha = isset($Format["LabelsBGAlpha"]) ? $Format["LabelsBGAlpha"] : 50;
+ $LabelPos = isset($Format["LabelPos"]) ? $Format["LabelPos"] : RADAR_LABELS_ROTATED;
+ $LabelPadding = isset($Format["LabelPadding"]) ? $Format["LabelPadding"] : 4;
+ $DrawPoints = isset($Format["DrawPoints"]) ? $Format["DrawPoints"] : TRUE;
+ $PointRadius = isset($Format["PointRadius"]) ? $Format["PointRadius"] : 4;
+ $PointSurrounding = isset($Format["PointRadius"]) ? $Format["PointRadius"] : -30;
+ $DrawLines = isset($Format["DrawLines"]) ? $Format["DrawLines"] : TRUE;
+ $LineLoopStart = isset($Format["LineLoopStart"]) ? $Format["LineLoopStart"] : FALSE;
+ $DrawPoly = isset($Format["DrawPoly"]) ? $Format["DrawPoly"] : FALSE;
+ $PolyAlpha = isset($Format["PolyAlpha"]) ? $Format["PolyAlpha"] : NULL;
+ $FontSize = $Object->FontSize;
+ $X1 = $Object->GraphAreaX1;
+ $Y1 = $Object->GraphAreaY1;
+ $X2 = $Object->GraphAreaX2;
+ $Y2 = $Object->GraphAreaY2;
+ $RecordImageMap = isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE;
+
+ if ( $AxisBoxRounded ) { $DrawAxisValues = TRUE; }
+
+ /* Cancel default tick length if ticks not enabled */
+ if ( $DrawTicks == FALSE ) { $TicksLength = 0; }
+
+ /* Data Processing */
+ $Data = $Values->getData();
+ $Palette = $Values->getPalette();
+
+ /* Catch the number of required axis */
+ $LabelSerie = $Data["Abscissa"];
+ if ( $LabelSerie != "" )
+ { $Points = count($Data["Series"][$LabelSerie]["Data"]); }
+ else
+ {
+ $Points = 0;
+ foreach($Data["Series"] as $SerieName => $DataArray)
+ { if ( count($DataArray["Data"]) > $Points ) { $Points = count($DataArray["Data"]); } }
+ }
+
+ /* Draw the axis */
+ $CenterX = ($X2-$X1)/2 + $X1;
+ $CenterY = ($Y2-$Y1)/2 + $Y1;
+
+ $EdgeHeight = min(($X2-$X1)/2,($Y2-$Y1)/2);
+ if ( $WriteLabels )
+ $EdgeHeight = $EdgeHeight - $FontSize - $LabelPadding - $TicksLength;
+
+ /* Determine the scale if set to automatic */
+ if ( $SegmentHeight == SEGMENT_HEIGHT_AUTO)
+ {
+ $Max = 0;
+ foreach($Data["Series"] as $SerieName => $DataArray)
+ {
+ if ( $SerieName != $LabelSerie )
+ {
+ if ( max($DataArray["Data"]) > $Max ) { $Max = max($DataArray["Data"]); }
+ }
+ }
+ $MaxSegments = $EdgeHeight/20;
+ $Scale = $Object->computeScale(0,$Max,$MaxSegments,array(1,2,5));
+
+ $Segments = $Scale["Rows"];
+ $SegmentHeight = $Scale["RowHeight"];
+ }
+
+
+ /* Background processing */
+ if ( $DrawBackground )
+ {
+ $RestoreShadow = $Object->Shadow;
+ $Object->Shadow = FALSE;
+
+ if ($BackgroundGradient == NULL)
+ {
+ $Color = array("R"=>$BackgroundR,"G"=>$BackgroundG,"B"=>$BackgroundB,"Alpha"=>$BackgroundAlpha);
+ $Object->drawFilledCircle($CenterX,$CenterY,$EdgeHeight,$Color);
+ }
+ else
+ {
+ $GradientROffset = ($BackgroundGradient["EndR"] - $BackgroundGradient["StartR"]) / $Segments;
+ $GradientGOffset = ($BackgroundGradient["EndG"] - $BackgroundGradient["StartG"]) / $Segments;
+ $GradientBOffset = ($BackgroundGradient["EndB"] - $BackgroundGradient["StartB"]) / $Segments;
+ $GradientAlphaOffset = ($BackgroundGradient["EndAlpha"] - $BackgroundGradient["StartAlpha"]) / $Segments;
+
+ for($j=$Segments;$j>=1;$j--)
+ {
+ $Color = array("R"=>$BackgroundGradient["StartR"]+$GradientROffset*$j,"G"=>$BackgroundGradient["StartG"]+$GradientGOffset*$j,"B"=>$BackgroundGradient["StartB"]+$GradientBOffset*$j,"Alpha"=>$BackgroundGradient["StartAlpha"]+$GradientAlphaOffset*$j);
+ $Object->drawFilledCircle($CenterX,$CenterY,($EdgeHeight/$Segments)*$j,$Color);
+ }
+ }
+ $Object->Shadow = $RestoreShadow;
+ }
+
+ /* Axis to axis lines */
+ $Color = array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha);
+ for($j=1;$j<=$Segments;$j++)
+ {
+ $Radius = ($EdgeHeight/$Segments)*$j;
+ $Object->drawCircle($CenterX,$CenterY,$Radius,$Radius,$Color);
+ }
+
+ if ( $DrawAxisValues )
+ {
+ if ( $LabelsBackground )
+ $Options = array("DrawBox"=>TRUE, "Align"=>TEXT_ALIGN_MIDDLEMIDDLE,"BoxR"=>$LabelsBGR,"BoxG"=>$LabelsBGG,"BoxB"=>$LabelsBGB,"BoxAlpha"=>$LabelsBGAlpha);
+ else
+ $Options = array("Align"=>TEXT_ALIGN_MIDDLEMIDDLE);
+
+ if ( $AxisBoxRounded ) { $Options["BoxRounded"] = TRUE; }
+
+ $Options["FontName"] = $AxisFontName;
+ $Options["FontSize"] = $AxisFontSize;
+
+ $Angle = 360 / ($Points*2);
+ for($j=1;$j<=$Segments;$j++)
+ {
+ $EdgeX1 = cos(deg2rad($Angle+$AxisRotation)) * ($EdgeHeight/$Segments)*$j + $CenterX;
+ $EdgeY1 = sin(deg2rad($Angle+$AxisRotation)) * ($EdgeHeight/$Segments)*$j + $CenterY;
+ $Label = $j*$SegmentHeight;
+
+ $Object->drawText($EdgeX1,$EdgeY1,$Label,$Options);
+ }
+ }
+
+ /* Axis lines */
+ $ID = 0;
+ for($i=0;$i<=359;$i=$i+$AxisSteps)
+ {
+ $EdgeX = cos(deg2rad($i+$AxisRotation)) * ($EdgeHeight+$TicksLength) + $CenterX;
+ $EdgeY = sin(deg2rad($i+$AxisRotation)) * ($EdgeHeight+$TicksLength) + $CenterY;
+
+ $Object->drawLine($CenterX,$CenterY,$EdgeX,$EdgeY,$Color);
+
+ if ( $WriteLabels )
+ {
+ $LabelX = cos(deg2rad($i+$AxisRotation)) * ($EdgeHeight+$LabelPadding+$TicksLength) + $CenterX;
+ $LabelY = sin(deg2rad($i+$AxisRotation)) * ($EdgeHeight+$LabelPadding+$TicksLength) + $CenterY;
+ $Label = $i."°";
+
+ if ( $LabelPos == RADAR_LABELS_ROTATED )
+ $Object->drawText($LabelX,$LabelY,$Label,array("Angle"=>(360-$i),"Align"=>TEXT_ALIGN_BOTTOMMIDDLE));
+ else
+ {
+ if ( (floor($LabelX) == floor($CenterX)) && (floor($LabelY) < floor($CenterY)) ) { $Object->drawText($LabelX,$LabelY,$Label,array("Align"=>TEXT_ALIGN_BOTTOMMIDDLE)); }
+ if ( (floor($LabelX) > floor($CenterX)) && (floor($LabelY) < floor($CenterY)) ) { $Object->drawText($LabelX,$LabelY,$Label,array("Align"=>TEXT_ALIGN_BOTTOMLEFT)); }
+ if ( (floor($LabelX) > floor($CenterX)) && (floor($LabelY) == floor($CenterY)) ) { $Object->drawText($LabelX,$LabelY,$Label,array("Align"=>TEXT_ALIGN_MIDDLELEFT)); }
+ if ( (floor($LabelX) > floor($CenterX)) && (floor($LabelY) > floor($CenterY)) ) { $Object->drawText($LabelX,$LabelY,$Label,array("Align"=>TEXT_ALIGN_TOPLEFT)); }
+ if ( (floor($LabelX) < floor($CenterX)) && (floor($LabelY) < floor($CenterY)) ) { $Object->drawText($LabelX,$LabelY,$Label,array("Align"=>TEXT_ALIGN_BOTTOMRIGHT)); }
+ if ( (floor($LabelX) < floor($CenterX)) && (floor($LabelY) == floor($CenterY)) ) { $Object->drawText($LabelX,$LabelY,$Label,array("Align"=>TEXT_ALIGN_MIDDLERIGHT)); }
+ if ( (floor($LabelX) < floor($CenterX)) && (floor($LabelY) > floor($CenterY)) ) { $Object->drawText($LabelX,$LabelY,$Label,array("Align"=>TEXT_ALIGN_TOPRIGHT)); }
+ if ( (floor($LabelX) == floor($CenterX)) && (floor($LabelY) > floor($CenterY)) ) { $Object->drawText($LabelX,$LabelY,$Label,array("Align"=>TEXT_ALIGN_TOPMIDDLE)); }
+ }
+ }
+ $ID++;
+ }
+
+ /* Compute the plots position */
+ $ID = 0; $Plot = "";
+ foreach($Data["Series"] as $SerieName => $DataSet)
+ {
+ if ( $SerieName != $LabelSerie )
+ {
+ $Color = array("R"=>$Palette[$ID]["R"],"G"=>$Palette[$ID]["G"],"B"=>$Palette[$ID]["B"],"Alpha"=>$Palette[$ID]["Alpha"],"Surrounding"=>$PointSurrounding);
+ foreach($DataSet["Data"] as $Key => $Value)
+ {
+ $Angle = $Data["Series"][$LabelSerie]["Data"][$Key];
+ $Length = ($EdgeHeight/($Segments*$SegmentHeight))*$Value;
+
+ $X = cos(deg2rad($Angle+$AxisRotation)) * $Length + $CenterX;
+ $Y = sin(deg2rad($Angle+$AxisRotation)) * $Length + $CenterY;
+
+ if ( $RecordImageMap ) { $this->pChartObject->addToImageMap("CIRCLE",floor($X).",".floor($Y).",".floor($PointRadius),$this->pChartObject->toHTMLColor($Palette[$ID]["R"],$Palette[$ID]["G"],$Palette[$ID]["B"]),$DataSet["Description"],$Data["Series"][$LabelSerie]["Data"][$Key]."&deg = ".$Value); }
+
+ $Plot[$ID][] = array($X,$Y,$Value);
+ }
+ $ID++;
+ }
+ }
+
+ /* Draw all that stuff! */
+ foreach($Plot as $ID => $Points)
+ {
+ $Color = array("R"=>$Palette[$ID]["R"],"G"=>$Palette[$ID]["G"],"B"=>$Palette[$ID]["B"],"Alpha"=>$Palette[$ID]["Alpha"],"Surrounding"=>$PointSurrounding);
+
+ /* Draw the polygons */
+ if ( $DrawPoly )
+ {
+ if ($PolyAlpha != NULL)
+ $Color = array("R"=>$Palette[$ID]["R"],"G"=>$Palette[$ID]["G"],"B"=>$Palette[$ID]["B"],"Alpha"=>$PolyAlpha,"Surrounding"=>$PointSurrounding);
+
+ $PointsArray = "";
+ for($i=0; $i<count($Points);$i++)
+ { $PointsArray[] = $Points[$i][0]; $PointsArray[] = $Points[$i][1]; }
+
+ $Object->drawPolygon($PointsArray,$Color);
+ }
+
+ $Color = array("R"=>$Palette[$ID]["R"],"G"=>$Palette[$ID]["G"],"B"=>$Palette[$ID]["B"],"Alpha"=>$Palette[$ID]["Alpha"],"Surrounding"=>$PointSurrounding);
+
+ /* Bubble and labels settings */
+ $TextSettings = array("Align"=>TEXT_ALIGN_MIDDLEMIDDLE,"FontName"=>$ValueFontName,"FontSize"=>$ValueFontSize,"R"=>$Palette[$ID]["R"],"G"=>$Palette[$ID]["G"],"B"=>$Palette[$ID]["B"]);
+ $InnerColor = array("R"=>$InnerBubbleR,"G"=>$InnerBubbleG,"B"=>$InnerBubbleB,"Alpha"=>$InnerBubbleAlpha);
+ if ( $OuterBubbleR != VOID )
+ $OuterColor = array("R"=>$OuterBubbleR,"G"=>$OuterBubbleG,"B"=>$OuterBubbleB,"Alpha"=>$OuterBubbleAlpha);
+ else
+ $OuterColor = array("R"=>$Palette[$ID]["R"]+20,"G"=>$Palette[$ID]["G"]+20,"B"=>$Palette[$ID]["B"]+20,"Alpha"=>$Palette[$ID]["Alpha"]);
+
+ /* Loop to the starting points if asked */
+ if ( $LineLoopStart && $DrawLines )
+ $Object->drawLine($Points[count($Points)-1][0],$Points[count($Points)-1][1],$Points[0][0],$Points[0][1],$Color);
+
+ /* Draw the lines & points */
+ for($i=0; $i<count($Points);$i++)
+ {
+ if ( $DrawLines && $i < count($Points)-1)
+ $Object->drawLine($Points[$i][0],$Points[$i][1],$Points[$i+1][0],$Points[$i+1][1],$Color);
+
+ if ( $DrawPoints )
+ $Object->drawFilledCircle($Points[$i][0],$Points[$i][1],$PointRadius,$Color);
+
+ if ( $WriteValuesInBubble && $WriteValues )
+ {
+ $TxtPos = $this->pChartObject->getTextBox($Points[$i][0],$Points[$i][1],$ValueFontName,$ValueFontSize,0,$Points[$i][2]);
+ $Radius = floor(($TxtPos[1]["X"] - $TxtPos[0]["X"] + $ValuePadding*2)/2);
+
+ $this->pChartObject->drawFilledCircle($Points[$i][0],$Points[$i][1],$Radius+$OuterBubbleRadius,$OuterColor);
+ $this->pChartObject->drawFilledCircle($Points[$i][0],$Points[$i][1],$Radius,$InnerColor);
+ }
+
+ if ( $WriteValues )
+ $this->pChartObject->drawText($Points[$i][0]-1,$Points[$i][1]-1,$Points[$i][2],$TextSettings);
+ }
+ }
+ }
+ }
+?> \ No newline at end of file
diff --git a/For Weekly Test/tricode/class/pScatter.class.php b/For Weekly Test/tricode/class/pScatter.class.php
new file mode 100644
index 0000000..55ef1c7
--- /dev/null
+++ b/For Weekly Test/tricode/class/pScatter.class.php
@@ -0,0 +1,954 @@
+<?php
+ /*
+ pScatter - class to draw scatter charts
+
+ Version : 2.1.2
+ Made by : Jean-Damien POGOLOTTI
+ Last Update : 03/08/11
+
+ This file can be distributed under the license you can find at :
+
+ http://www.pchart.net/license
+
+ You can find the whole class documentation on the pChart web site.
+ */
+
+ define("SCATTER_MISSING_X_SERIE" , 190001);
+ define("SCATTER_MISSING_Y_SERIE" , 190002);
+
+ /* pScatter class definition */
+ class pScatter
+ {
+ var $pChartObject;
+ var $pDataObject;
+
+ /* Class creator */
+ function pScatter($pChartObject,$pDataObject)
+ {
+ $this->pChartObject = $pChartObject;
+ $this->pDataObject = $pDataObject;
+ }
+
+ /* Prepare the scale */
+ function drawScatterScale($Format="")
+ {
+ $Mode = isset($Format["Mode"]) ? $Format["Mode"] : SCALE_MODE_FLOATING;
+ $Floating = isset($Format["Floating"]) ? $Format["Floating"] : FALSE;
+ $XLabelsRotation = isset($Format["XLabelsRotation"]) ? $Format["XLabelsRotation"] : 90;
+ $MinDivHeight = isset($Format["MinDivHeight"]) ? $Format["MinDivHeight"] : 20;
+ $Factors = isset($Format["Factors"]) ? $Format["Factors"] : array(1,2,5);
+ $ManualScale = isset($Format["ManualScale"]) ? $Format["ManualScale"] : array("0"=>array("Min"=>-100,"Max"=>100));
+ $XMargin = isset($Format["XMargin"]) ? $Format["XMargin"] : 0;
+ $YMargin = isset($Format["YMargin"]) ? $Format["YMargin"] : 0;
+ $ScaleSpacing = isset($Format["ScaleSpacing"]) ? $Format["ScaleSpacing"] : 15;
+ $InnerTickWidth = isset($Format["InnerTickWidth"]) ? $Format["InnerTickWidth"] : 2;
+ $OuterTickWidth = isset($Format["OuterTickWidth"]) ? $Format["OuterTickWidth"] : 2;
+ $DrawXLines = isset($Format["DrawXLines"]) ? $Format["DrawXLines"] : ALL;
+ $DrawYLines = isset($Format["DrawYLines"]) ? $Format["DrawYLines"] : ALL;
+ $GridTicks = isset($Format["GridTicks"]) ? $Format["GridTicks"] : 4;
+ $GridR = isset($Format["GridR"]) ? $Format["GridR"] : 255;
+ $GridG = isset($Format["GridG"]) ? $Format["GridG"] : 255;
+ $GridB = isset($Format["GridB"]) ? $Format["GridB"] : 255;
+ $GridAlpha = isset($Format["GridAlpha"]) ? $Format["GridAlpha"] : 40;
+ $AxisRo = isset($Format["AxisR"]) ? $Format["AxisR"] : 0;
+ $AxisGo = isset($Format["AxisG"]) ? $Format["AxisG"] : 0;
+ $AxisBo = isset($Format["AxisB"]) ? $Format["AxisB"] : 0;
+ $AxisAlpha = isset($Format["AxisAlpha"]) ? $Format["AxisAlpha"] : 100;
+ $TickRo = isset($Format["TickR"]) ? $Format["TickR"] : 0;
+ $TickGo = isset($Format["TickG"]) ? $Format["TickG"] : 0;
+ $TickBo = isset($Format["TickB"]) ? $Format["TickB"] : 0;
+ $TickAlpha = isset($Format["TickAlpha"]) ? $Format["TickAlpha"] : 100;
+ $DrawSubTicks = isset($Format["DrawSubTicks"]) ? $Format["DrawSubTicks"] : FALSE;
+ $InnerSubTickWidth = isset($Format["InnerSubTickWidth"]) ? $Format["InnerSubTickWidth"] : 0;
+ $OuterSubTickWidth = isset($Format["OuterSubTickWidth"]) ? $Format["OuterSubTickWidth"] : 2;
+ $SubTickR = isset($Format["SubTickR"]) ? $Format["SubTickR"] : 255;
+ $SubTickG = isset($Format["SubTickG"]) ? $Format["SubTickG"] : 0;
+ $SubTickB = isset($Format["SubTickB"]) ? $Format["SubTickB"] : 0;
+ $SubTickAlpha = isset($Format["SubTickAlpha"]) ? $Format["SubTickAlpha"] : 100;
+ $XReleasePercent = isset($Format["XReleasePercent"]) ? $Format["XReleasePercent"] : 1;
+ $DrawArrows = isset($Format["DrawArrows"]) ? $Format["DrawArrows"] : FALSE;
+ $ArrowSize = isset($Format["ArrowSize"]) ? $Format["ArrowSize"] : 8;
+ $CycleBackground = isset($Format["CycleBackground"]) ? $Format["CycleBackground"] : FALSE;
+ $BackgroundR1 = isset($Format["BackgroundR1"]) ? $Format["BackgroundR1"] : 255;
+ $BackgroundG1 = isset($Format["BackgroundG1"]) ? $Format["BackgroundG1"] : 255;
+ $BackgroundB1 = isset($Format["BackgroundB1"]) ? $Format["BackgroundB1"] : 255;
+ $BackgroundAlpha1 = isset($Format["BackgroundAlpha1"]) ? $Format["BackgroundAlpha1"] : 10;
+ $BackgroundR2 = isset($Format["BackgroundR2"]) ? $Format["BackgroundR2"] : 230;
+ $BackgroundG2 = isset($Format["BackgroundG2"]) ? $Format["BackgroundG2"] : 230;
+ $BackgroundB2 = isset($Format["BackgroundB2"]) ? $Format["BackgroundB2"] : 230;
+ $BackgroundAlpha2 = isset($Format["BackgroundAlpha2"]) ? $Format["BackgroundAlpha2"] : 10;
+
+ /* Check if we have at least both one X and Y axis */
+ $GotXAxis = FALSE; $GotYAxis = FALSE;
+ foreach($this->pDataObject->Data["Axis"] as $AxisID => $AxisSettings)
+ {
+ if ( $AxisSettings["Identity"] == AXIS_X ) { $GotXAxis = TRUE; }
+ if ( $AxisSettings["Identity"] == AXIS_Y ) { $GotYAxis = TRUE; }
+ }
+ if ( !$GotXAxis ) { return(SCATTER_MISSING_X_SERIE); }
+ if ( !$GotYAxis ) { return(SCATTER_MISSING_Y_SERIE); }
+
+ /* Skip a NOTICE event in case of an empty array */
+ if ( $DrawYLines == NONE ) { $DrawYLines = array("zarma"=>"31"); }
+
+ $Data = $this->pDataObject->getData();
+
+ foreach($Data["Axis"] as $AxisID => $AxisSettings)
+ {
+ if ( $AxisSettings["Identity"] == AXIS_X)
+ { $Width = $this->pChartObject->GraphAreaX2 - $this->pChartObject->GraphAreaX1 - $XMargin*2; }
+ else
+ { $Width = $this->pChartObject->GraphAreaY2 - $this->pChartObject->GraphAreaY1 - $YMargin*2; }
+
+ $AxisMin = ABSOLUTE_MAX; $AxisMax = OUT_OF_SIGHT;
+ if ( $Mode == SCALE_MODE_FLOATING )
+ {
+ foreach($Data["Series"] as $SerieID => $SerieParameter)
+ {
+ if ( $SerieParameter["Axis"] == $AxisID && $Data["Series"][$SerieID]["isDrawable"] )
+ {
+ $AxisMax = max($AxisMax,$Data["Series"][$SerieID]["Max"]);
+ $AxisMin = min($AxisMin,$Data["Series"][$SerieID]["Min"]);
+ }
+ }
+ $AutoMargin = (($AxisMax-$AxisMin)/100)*$XReleasePercent;
+
+ $Data["Axis"][$AxisID]["Min"] = $AxisMin-$AutoMargin; $Data["Axis"][$AxisID]["Max"] = $AxisMax+$AutoMargin;
+ }
+ elseif ( $Mode == SCALE_MODE_MANUAL )
+ {
+ if ( isset($ManualScale[$AxisID]["Min"]) && isset($ManualScale[$AxisID]["Max"]) )
+ {
+ $Data["Axis"][$AxisID]["Min"] = $ManualScale[$AxisID]["Min"];
+ $Data["Axis"][$AxisID]["Max"] = $ManualScale[$AxisID]["Max"];
+ }
+ else
+ { echo "Manual scale boundaries not set."; exit(); }
+ }
+
+ /* Full manual scale */
+ if ( isset($ManualScale[$AxisID]["Rows"]) && isset($ManualScale[$AxisID]["RowHeight"]) )
+ $Scale = array("Rows"=>$ManualScale[$AxisID]["Rows"],"RowHeight"=>$ManualScale[$AxisID]["RowHeight"],"XMin"=>$ManualScale[$AxisID]["Min"],"XMax"=>$ManualScale[$AxisID]["Max"]);
+ else
+ {
+ $MaxDivs = floor($Width/$MinDivHeight);
+ $Scale = $this->pChartObject->computeScale($Data["Axis"][$AxisID]["Min"],$Data["Axis"][$AxisID]["Max"],$MaxDivs,$Factors,$AxisID);
+ }
+
+ $Data["Axis"][$AxisID]["Margin"] = $AxisSettings["Identity"] == AXIS_X ? $XMargin : $YMargin;
+ $Data["Axis"][$AxisID]["ScaleMin"] = $Scale["XMin"];
+ $Data["Axis"][$AxisID]["ScaleMax"] = $Scale["XMax"];
+ $Data["Axis"][$AxisID]["Rows"] = $Scale["Rows"];
+ $Data["Axis"][$AxisID]["RowHeight"] = $Scale["RowHeight"];
+
+ if ( isset($Scale["Format"]) ) { $Data["Axis"][$AxisID]["Format"] = $Scale["Format"]; }
+
+ if ( !isset($Data["Axis"][$AxisID]["Display"]) ) { $Data["Axis"][$AxisID]["Display"] = NULL; }
+ if ( !isset($Data["Axis"][$AxisID]["Format"]) ) { $Data["Axis"][$AxisID]["Format"] = NULL; }
+ if ( !isset($Data["Axis"][$AxisID]["Unit"]) ) { $Data["Axis"][$AxisID]["Unit"] = NULL; }
+ }
+
+ /* Get the default font color */
+ $FontColorRo = $this->pChartObject->FontColorR; $FontColorGo = $this->pChartObject->FontColorG; $FontColorBo = $this->pChartObject->FontColorB;
+
+ /* Set the original boundaries */
+ $AxisPos["L"] = $this->pChartObject->GraphAreaX1; $AxisPos["R"] = $this->pChartObject->GraphAreaX2; $AxisPos["T"] = $this->pChartObject->GraphAreaY1; $AxisPos["B"] = $this->pChartObject->GraphAreaY2;
+
+ foreach($Data["Axis"] as $AxisID => $AxisSettings)
+ {
+ if ( isset($AxisSettings["Color"]) )
+ {
+ $AxisR = $AxisSettings["Color"]["R"]; $AxisG = $AxisSettings["Color"]["G"]; $AxisB = $AxisSettings["Color"]["B"];
+ $TickR = $AxisSettings["Color"]["R"]; $TickG = $AxisSettings["Color"]["G"]; $TickB = $AxisSettings["Color"]["B"];
+ $this->pChartObject->setFontProperties(array("R"=>$AxisSettings["Color"]["R"],"G"=>$AxisSettings["Color"]["G"],"B"=>$AxisSettings["Color"]["B"]));
+ }
+ else
+ {
+ $AxisR = $AxisRo; $AxisG = $AxisGo; $AxisB = $AxisBo;
+ $TickR = $TickRo; $TickG = $TickGo; $TickB = $TickBo;
+ $this->pChartObject->setFontProperties(array("R"=>$FontColorRo,"G"=>$FontColorGo,"B"=>$FontColorBo));
+ }
+
+ $LastValue = "w00t"; $ID = 1;
+ if ( $AxisSettings["Identity"] == AXIS_X )
+ {
+ if ( $AxisSettings["Position"] == AXIS_POSITION_BOTTOM )
+ {
+ if ( $XLabelsRotation == 0 ) { $LabelAlign = TEXT_ALIGN_TOPMIDDLE; $LabelOffset = 2; }
+ if ( $XLabelsRotation > 0 && $XLabelsRotation < 190 ) { $LabelAlign = TEXT_ALIGN_MIDDLERIGHT; $LabelOffset = 5; }
+ if ( $XLabelsRotation == 180 ) { $LabelAlign = TEXT_ALIGN_BOTTOMMIDDLE; $LabelOffset = 5; }
+ if ( $XLabelsRotation > 180 && $XLabelsRotation < 360 ) { $LabelAlign = TEXT_ALIGN_MIDDLELEFT; $LabelOffset = 2; }
+
+ if ( $Floating )
+ { $FloatingOffset = $YMargin; $this->pChartObject->drawLine($this->pChartObject->GraphAreaX1+$AxisSettings["Margin"],$AxisPos["B"],$this->pChartObject->GraphAreaX2-$AxisSettings["Margin"],$AxisPos["B"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
+ else
+ { $FloatingOffset = 0; $this->pChartObject->drawLine($this->pChartObject->GraphAreaX1,$AxisPos["B"],$this->pChartObject->GraphAreaX2,$AxisPos["B"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
+
+ if ( $DrawArrows ) { $this->pChartObject->drawArrow($this->pChartObject->GraphAreaX2-$AxisSettings["Margin"],$AxisPos["B"],$this->pChartObject->GraphAreaX2+($ArrowSize*2),$AxisPos["B"],array("FillR"=>$AxisR,"FillG"=>$AxisG,"FillB"=>$AxisB,"Size"=>$ArrowSize)); }
+
+ $Width = ($this->pChartObject->GraphAreaX2 - $this->pChartObject->GraphAreaX1) - $AxisSettings["Margin"]*2;
+ $Step = $Width / $AxisSettings["Rows"]; $SubTicksSize = $Step /2; $MaxBottom = $AxisPos["B"];
+ $LastX = NULL;
+ for($i=0;$i<=$AxisSettings["Rows"];$i++)
+ {
+ $XPos = $this->pChartObject->GraphAreaX1 + $AxisSettings["Margin"] + $Step*$i;
+ $YPos = $AxisPos["B"];
+ $Value = $this->pChartObject->scaleFormat($AxisSettings["ScaleMin"] + $AxisSettings["RowHeight"]*$i,$AxisSettings["Display"],$AxisSettings["Format"],$AxisSettings["Unit"]);
+
+ if ( $i%2 == 1 ) { $BGColor = array("R"=>$BackgroundR1,"G"=>$BackgroundG1,"B"=>$BackgroundB1,"Alpha"=>$BackgroundAlpha1); } else { $BGColor = array("R"=>$BackgroundR2,"G"=>$BackgroundG2,"B"=>$BackgroundB2,"Alpha"=>$BackgroundAlpha2); }
+ if ( $LastX != NULL && $CycleBackground && ( $DrawXLines == ALL || in_array($AxisID,$DrawXLines) )) { $this->pChartObject->drawFilledRectangle($LastX,$this->pChartObject->GraphAreaY1+$FloatingOffset,$XPos,$this->pChartObject->GraphAreaY2-$FloatingOffset,$BGColor); }
+
+ if ( $DrawXLines == ALL || in_array($AxisID,$DrawXLines) ) { $this->pChartObject->drawLine($XPos,$this->pChartObject->GraphAreaY1+$FloatingOffset,$XPos,$this->pChartObject->GraphAreaY2-$FloatingOffset,array("R"=>$GridR,"G"=>$GridG,"B"=>$GridB,"Alpha"=>$GridAlpha,"Ticks"=>$GridTicks)); }
+ if ( $DrawSubTicks && $i != $AxisSettings["Rows"] )
+ $this->pChartObject->drawLine($XPos+$SubTicksSize,$YPos-$InnerSubTickWidth,$XPos+$SubTicksSize,$YPos+$OuterSubTickWidth,array("R"=>$SubTickR,"G"=>$SubTickG,"B"=>$SubTickB,"Alpha"=>$SubTickAlpha));
+
+ $this->pChartObject->drawLine($XPos,$YPos-$InnerTickWidth,$XPos,$YPos+$OuterTickWidth,array("R"=>$TickR,"G"=>$TickG,"B"=>$TickB,"Alpha"=>$TickAlpha));
+ $Bounds = $this->pChartObject->drawText($XPos,$YPos+$OuterTickWidth+$LabelOffset,$Value,array("Angle"=>$XLabelsRotation,"Align"=>$LabelAlign));
+ $TxtBottom = $YPos+2+$OuterTickWidth+2+($Bounds[0]["Y"]-$Bounds[2]["Y"]);
+ $MaxBottom = max($MaxBottom,$TxtBottom);
+
+ $LastX = $XPos;
+ }
+
+ if ( isset($AxisSettings["Name"]) )
+ {
+ $YPos = $MaxBottom+2;
+ $XPos = $this->pChartObject->GraphAreaX1+($this->pChartObject->GraphAreaX2-$this->pChartObject->GraphAreaX1)/2;
+ $Bounds = $this->pChartObject->drawText($XPos,$YPos,$AxisSettings["Name"],array("Align"=>TEXT_ALIGN_TOPMIDDLE));
+ $MaxBottom = $Bounds[0]["Y"];
+
+ $this->pDataObject->Data["GraphArea"]["Y2"] = $MaxBottom + $this->pChartObject->FontSize;
+ }
+
+ $AxisPos["B"] = $MaxBottom + $ScaleSpacing;
+ }
+ elseif ( $AxisSettings["Position"] == AXIS_POSITION_TOP )
+ {
+ if ( $XLabelsRotation == 0 ) { $LabelAlign = TEXT_ALIGN_BOTTOMMIDDLE; $LabelOffset = 2; }
+ if ( $XLabelsRotation > 0 && $XLabelsRotation < 190 ) { $LabelAlign = TEXT_ALIGN_MIDDLELEFT; $LabelOffset = 2; }
+ if ( $XLabelsRotation == 180 ) { $LabelAlign = TEXT_ALIGN_TOPMIDDLE; $LabelOffset = 5; }
+ if ( $XLabelsRotation > 180 && $SLabelxRotation < 360 ) { $LabelAlign = TEXT_ALIGN_MIDDLERIGHT; $LabelOffset = 5; }
+
+ if ( $Floating )
+ { $FloatingOffset = $YMargin; $this->pChartObject->drawLine($this->pChartObject->GraphAreaX1+$AxisSettings["Margin"],$AxisPos["T"],$this->pChartObject->GraphAreaX2-$AxisSettings["Margin"],$AxisPos["T"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
+ else
+ { $FloatingOffset = 0; $this->pChartObject->drawLine($this->pChartObject->GraphAreaX1,$AxisPos["T"],$this->pChartObject->GraphAreaX2,$AxisPos["T"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
+
+ if ( $DrawArrows ) { $this->pChartObject->drawArrow($this->pChartObject->GraphAreaX2-$AxisSettings["Margin"],$AxisPos["T"],$this->pChartObject->GraphAreaX2+($ArrowSize*2),$AxisPos["T"],array("FillR"=>$AxisR,"FillG"=>$AxisG,"FillB"=>$AxisB,"Size"=>$ArrowSize)); }
+
+ $Width = ($this->pChartObject->GraphAreaX2 - $this->pChartObject->GraphAreaX1) - $AxisSettings["Margin"]*2;
+ $Step = $Width / $AxisSettings["Rows"]; $SubTicksSize = $Step /2; $MinTop = $AxisPos["T"];
+ $LastX = NULL;
+ for($i=0;$i<=$AxisSettings["Rows"];$i++)
+ {
+ $XPos = $this->pChartObject->GraphAreaX1 + $AxisSettings["Margin"] + $Step*$i;
+ $YPos = $AxisPos["T"];
+ $Value = $this->pChartObject->scaleFormat($AxisSettings["ScaleMin"] + $AxisSettings["RowHeight"]*$i,$AxisSettings["Display"],$AxisSettings["Format"],$AxisSettings["Unit"]);
+
+ if ( $i%2 == 1 ) { $BGColor = array("R"=>$BackgroundR1,"G"=>$BackgroundG1,"B"=>$BackgroundB1,"Alpha"=>$BackgroundAlpha1); } else { $BGColor = array("R"=>$BackgroundR2,"G"=>$BackgroundG2,"B"=>$BackgroundB2,"Alpha"=>$BackgroundAlpha2); }
+ if ( $LastX != NULL && $CycleBackground && ( $DrawXLines == ALL || in_array($AxisID,$DrawXLines) )) { $this->pChartObject->drawFilledRectangle($LastX,$this->pChartObject->GraphAreaY1+$FloatingOffset,$XPos,$this->pChartObject->GraphAreaY2-$FloatingOffset,$BGColor); }
+
+ if ( $DrawXLines == ALL || in_array($AxisID,$DrawXLines) ) { $this->pChartObject->drawLine($XPos,$this->pChartObject->GraphAreaY1+$FloatingOffset,$XPos,$this->pChartObject->GraphAreaY2-$FloatingOffset,array("R"=>$GridR,"G"=>$GridG,"B"=>$GridB,"Alpha"=>$GridAlpha,"Ticks"=>$GridTicks)); }
+
+ if ( $DrawSubTicks && $i != $AxisSettings["Rows"] )
+ $this->pChartObject->drawLine($XPos+$SubTicksSize,$YPos-$OuterSubTickWidth,$XPos+$SubTicksSize,$YPos+$InnerSubTickWidth,array("R"=>$SubTickR,"G"=>$SubTickG,"B"=>$SubTickB,"Alpha"=>$SubTickAlpha));
+
+ $this->pChartObject->drawLine($XPos,$YPos-$OuterTickWidth,$XPos,$YPos+$InnerTickWidth,array("R"=>$TickR,"G"=>$TickG,"B"=>$TickB,"Alpha"=>$TickAlpha));
+ $Bounds = $this->pChartObject->drawText($XPos,$YPos-$OuterTickWidth-$LabelOffset,$Value,array("Angle"=>$XLabelsRotation,"Align"=>$LabelAlign));
+ $TxtBox = $YPos-$OuterTickWidth-4-($Bounds[0]["Y"]-$Bounds[2]["Y"]);
+ $MinTop = min($MinTop,$TxtBox);
+
+ $LastX = $XPos;
+ }
+
+ if ( isset($AxisSettings["Name"]) )
+ {
+ $YPos = $MinTop-2;
+ $XPos = $this->pChartObject->GraphAreaX1+($this->pChartObject->GraphAreaX2-$this->pChartObject->GraphAreaX1)/2;
+ $Bounds = $this->pChartObject->drawText($XPos,$YPos,$AxisSettings["Name"],array("Align"=>TEXT_ALIGN_BOTTOMMIDDLE));
+ $MinTop = $Bounds[2]["Y"];
+
+ $this->pDataObject->Data["GraphArea"]["Y1"] = $MinTop;
+ }
+
+ $AxisPos["T"] = $MinTop - $ScaleSpacing;
+ }
+ }
+ elseif ( $AxisSettings["Identity"] == AXIS_Y )
+ {
+ if ( $AxisSettings["Position"] == AXIS_POSITION_LEFT )
+ {
+
+ if ( $Floating )
+ { $FloatingOffset = $XMargin; $this->pChartObject->drawLine($AxisPos["L"],$this->pChartObject->GraphAreaY1+$AxisSettings["Margin"],$AxisPos["L"],$this->pChartObject->GraphAreaY2-$AxisSettings["Margin"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
+ else
+ { $FloatingOffset = 0; $this->pChartObject->drawLine($AxisPos["L"],$this->pChartObject->GraphAreaY1,$AxisPos["L"],$this->pChartObject->GraphAreaY2,array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
+
+ if ( $DrawArrows ) { $this->pChartObject->drawArrow($AxisPos["L"],$this->pChartObject->GraphAreaY1+$AxisSettings["Margin"],$AxisPos["L"],$this->pChartObject->GraphAreaY1-($ArrowSize*2),array("FillR"=>$AxisR,"FillG"=>$AxisG,"FillB"=>$AxisB,"Size"=>$ArrowSize)); }
+
+ $Height = ($this->pChartObject->GraphAreaY2 - $this->pChartObject->GraphAreaY1) - $AxisSettings["Margin"]*2;
+ $Step = $Height / $AxisSettings["Rows"]; $SubTicksSize = $Step /2; $MinLeft = $AxisPos["L"];
+ $LastY = NULL;
+ for($i=0;$i<=$AxisSettings["Rows"];$i++)
+ {
+ $YPos = $this->pChartObject->GraphAreaY2 - $AxisSettings["Margin"] - $Step*$i;
+ $XPos = $AxisPos["L"];
+ $Value = $this->pChartObject->scaleFormat($AxisSettings["ScaleMin"] + $AxisSettings["RowHeight"]*$i,$AxisSettings["Display"],$AxisSettings["Format"],$AxisSettings["Unit"]);
+
+ if ( $i%2 == 1 ) { $BGColor = array("R"=>$BackgroundR1,"G"=>$BackgroundG1,"B"=>$BackgroundB1,"Alpha"=>$BackgroundAlpha1); } else { $BGColor = array("R"=>$BackgroundR2,"G"=>$BackgroundG2,"B"=>$BackgroundB2,"Alpha"=>$BackgroundAlpha2); }
+ if ( $LastY != NULL && $CycleBackground && ( $DrawYLines == ALL || in_array($AxisID,$DrawYLines) )) { $this->pChartObject->drawFilledRectangle($this->pChartObject->GraphAreaX1+$FloatingOffset,$LastY,$this->pChartObject->GraphAreaX2-$FloatingOffset,$YPos,$BGColor); }
+
+ if ( ($YPos != $this->pChartObject->GraphAreaY1 && $YPos != $this->pChartObject->GraphAreaY2) && ($DrawYLines == ALL || in_array($AxisID,$DrawYLines) )) { $this->pChartObject->drawLine($this->pChartObject->GraphAreaX1+$FloatingOffset,$YPos,$this->pChartObject->GraphAreaX2-$FloatingOffset,$YPos,array("R"=>$GridR,"G"=>$GridG,"B"=>$GridB,"Alpha"=>$GridAlpha,"Ticks"=>$GridTicks)); }
+
+ if ( $DrawSubTicks && $i != $AxisSettings["Rows"] )
+ $this->pChartObject->drawLine($XPos-$OuterSubTickWidth,$YPos-$SubTicksSize,$XPos+$InnerSubTickWidth,$YPos-$SubTicksSize,array("R"=>$SubTickR,"G"=>$SubTickG,"B"=>$SubTickB,"Alpha"=>$SubTickAlpha));
+
+ $this->pChartObject->drawLine($XPos-$OuterTickWidth,$YPos,$XPos+$InnerTickWidth,$YPos,array("R"=>$TickR,"G"=>$TickG,"B"=>$TickB,"Alpha"=>$TickAlpha));
+ $Bounds = $this->pChartObject->drawText($XPos-$OuterTickWidth-2,$YPos,$Value,array("Align"=>TEXT_ALIGN_MIDDLERIGHT));
+ $TxtLeft = $XPos-$OuterTickWidth-2-($Bounds[1]["X"]-$Bounds[0]["X"]);
+ $MinLeft = min($MinLeft,$TxtLeft);
+
+ $LastY = $YPos;
+ }
+
+ if ( isset($AxisSettings["Name"]) )
+ {
+ $XPos = $MinLeft-2;
+ $YPos = $this->pChartObject->GraphAreaY1+($this->pChartObject->GraphAreaY2-$this->pChartObject->GraphAreaY1)/2;
+ $Bounds = $this->pChartObject->drawText($XPos,$YPos,$AxisSettings["Name"],array("Align"=>TEXT_ALIGN_BOTTOMMIDDLE,"Angle"=>90));
+ $MinLeft = $Bounds[2]["X"];
+
+ $this->pDataObject->Data["GraphArea"]["X1"] = $MinLeft;
+ }
+
+ $AxisPos["L"] = $MinLeft - $ScaleSpacing;
+ }
+ elseif ( $AxisSettings["Position"] == AXIS_POSITION_RIGHT )
+ {
+
+ if ( $Floating )
+ { $FloatingOffset = $XMargin; $this->pChartObject->drawLine($AxisPos["R"],$this->pChartObject->GraphAreaY1+$AxisSettings["Margin"],$AxisPos["R"],$this->pChartObject->GraphAreaY2-$AxisSettings["Margin"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
+ else
+ { $FloatingOffset = 0; $this->pChartObject->drawLine($AxisPos["R"],$this->pChartObject->GraphAreaY1,$AxisPos["R"],$this->pChartObject->GraphAreaY2,array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
+
+ if ( $DrawArrows ) { $this->pChartObject->drawArrow($AxisPos["R"],$this->pChartObject->GraphAreaY1+$AxisSettings["Margin"],$AxisPos["R"],$this->pChartObject->GraphAreaY1-($ArrowSize*2),array("FillR"=>$AxisR,"FillG"=>$AxisG,"FillB"=>$AxisB,"Size"=>$ArrowSize)); }
+
+ $Height = ($this->pChartObject->GraphAreaY2 - $this->pChartObject->GraphAreaY1) - $AxisSettings["Margin"]*2;
+ $Step = $Height / $AxisSettings["Rows"]; $SubTicksSize = $Step /2; $MaxLeft = $AxisPos["R"];
+ $LastY = NULL;
+ for($i=0;$i<=$AxisSettings["Rows"];$i++)
+ {
+ $YPos = $this->pChartObject->GraphAreaY2 - $AxisSettings["Margin"] - $Step*$i;
+ $XPos = $AxisPos["R"];
+ $Value = $this->pChartObject->scaleFormat($AxisSettings["ScaleMin"] + $AxisSettings["RowHeight"]*$i,$AxisSettings["Display"],$AxisSettings["Format"],$AxisSettings["Unit"]);
+
+ if ( $i%2 == 1 ) { $BGColor = array("R"=>$BackgroundR1,"G"=>$BackgroundG1,"B"=>$BackgroundB1,"Alpha"=>$BackgroundAlpha1); } else { $BGColor = array("R"=>$BackgroundR2,"G"=>$BackgroundG2,"B"=>$BackgroundB2,"Alpha"=>$BackgroundAlpha2); }
+ if ( $LastY != NULL && $CycleBackground && ( $DrawYLines == ALL || in_array($AxisID,$DrawYLines) )) { $this->pChartObject->drawFilledRectangle($this->pChartObject->GraphAreaX1+$FloatingOffset,$LastY,$this->pChartObject->GraphAreaX2-$FloatingOffset,$YPos,$BGColor); }
+
+ if ( ($YPos != $this->pChartObject->GraphAreaY1 && $YPos != $this->pChartObject->GraphAreaY2) && ($DrawYLines == ALL || in_array($AxisID,$DrawYLines)) ) { $this->pChartObject->drawLine($this->pChartObject->GraphAreaX1+$FloatingOffset,$YPos,$this->pChartObject->GraphAreaX2-$FloatingOffset,$YPos,array("R"=>$GridR,"G"=>$GridG,"B"=>$GridB,"Alpha"=>$GridAlpha,"Ticks"=>$GridTicks)); }
+
+ if ( $DrawSubTicks && $i != $AxisSettings["Rows"] )
+ $this->pChartObject->drawLine($XPos-$InnerSubTickWidth,$YPos-$SubTicksSize,$XPos+$OuterSubTickWidth,$YPos-$SubTicksSize,array("R"=>$SubTickR,"G"=>$SubTickG,"B"=>$SubTickB,"Alpha"=>$SubTickAlpha));
+
+ $this->pChartObject->drawLine($XPos-$InnerTickWidth,$YPos,$XPos+$OuterTickWidth,$YPos,array("R"=>$TickR,"G"=>$TickG,"B"=>$TickB,"Alpha"=>$TickAlpha));
+ $Bounds = $this->pChartObject->drawText($XPos+$OuterTickWidth+2,$YPos,$Value,array("Align"=>TEXT_ALIGN_MIDDLELEFT));
+ $TxtLeft = $XPos+$OuterTickWidth+2+($Bounds[1]["X"]-$Bounds[0]["X"]);
+ $MaxLeft = max($MaxLeft,$TxtLeft);
+
+ $LastY = $YPos;
+ }
+
+ if ( isset($AxisSettings["Name"]) )
+ {
+ $XPos = $MaxLeft+6;
+ $YPos = $this->pChartObject->GraphAreaY1+($this->pChartObject->GraphAreaY2-$this->pChartObject->GraphAreaY1)/2;
+ $Bounds = $this->pChartObject->drawText($XPos,$YPos,$AxisSettings["Name"],array("Align"=>TEXT_ALIGN_BOTTOMMIDDLE,"Angle"=>270));
+ $MaxLeft = $Bounds[2]["X"];
+
+ $this->pDataObject->Data["GraphArea"]["X2"] = $MaxLeft + $this->pChartObject->FontSize;
+ }
+
+ $AxisPos["R"] = $MaxLeft + $ScaleSpacing;
+ }
+ }
+ }
+
+ $this->pDataObject->saveAxisConfig($Data["Axis"]);
+ }
+
+ /* Draw a scatter plot chart */
+ function drawScatterPlotChart($Format=NULL)
+ {
+ $PlotSize = isset($Format["PlotSize"]) ? $Format["PlotSize"] : 3;
+ $PlotBorder = isset($Format["PlotBorder"]) ? $Format["PlotBorder"] : FALSE;
+ $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : 250;
+ $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : 250;
+ $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : 250;
+ $BorderAlpha = isset($Format["BorderAlpha"]) ? $Format["BorderAlpha"] : 30;
+ $BorderSize = isset($Format["BorderSize"]) ? $Format["BorderSize"] : 1;
+ $Surrounding = isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL;
+ $RecordImageMap = isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE;
+ $ImageMapTitle = isset($Format["ImageMapTitle"]) ? $Format["ImageMapTitle"] : NULL;
+ $ImageMapPrecision = isset($Format["ImageMapPrecision"]) ? $Format["ImageMapPrecision"] : 2;
+
+ $Data = $this->pDataObject->getData();
+ $Palette = $this->pDataObject->getPalette();
+
+ $BorderColor = array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha);
+
+ foreach($Data["ScatterSeries"] as $Key => $Series)
+ {
+ if ( $Series["isDrawable"] == TRUE )
+ {
+ $SerieX = $Series["X"]; $SerieValuesX = $Data["Series"][$SerieX]["Data"]; $SerieXAxis = $Data["Series"][$SerieX]["Axis"];
+ $SerieY = $Series["Y"]; $SerieValuesY = $Data["Series"][$SerieY]["Data"]; $SerieYAxis = $Data["Series"][$SerieY]["Axis"];
+
+ if ( $ImageMapTitle == NULL ) { $Description = $Data["Series"][$Series["X"]]["Description"]." / ".$Data["Series"][$Series["Y"]]["Description"]; } else { $Description = $ImageMapTitle; }
+
+ if ( isset($Series["Picture"]) && $Series["Picture"] != "" )
+ { $Picture = $Series["Picture"]; list($PicWidth,$PicHeight,$PicType) = $this->pChartObject->getPicInfo($Picture); }
+ else
+ { $Picture = NULL; }
+
+ $PosArrayX = $this->getPosArray($SerieValuesX,$SerieXAxis);
+ if ( !is_array($PosArrayX) ) { $Value = $PosArrayX; $PosArrayX = ""; $PosArrayX[0] = $Value; }
+ $PosArrayY = $this->getPosArray($SerieValuesY,$SerieYAxis);
+ if ( !is_array($PosArrayY) ) { $Value = $PosArrayY; $PosArrayY = ""; $PosArrayY[0] = $Value; }
+
+ $Color = array("R"=>$Series["Color"]["R"],"G"=>$Series["Color"]["G"],"B"=>$Series["Color"]["B"],"Alpha"=>$Series["Color"]["Alpha"]);
+
+ foreach($PosArrayX as $Key => $Value)
+ {
+ $X = $Value; $Y = $PosArrayY[$Key];
+
+ if ( $X != VOID && $Y != VOID )
+ {
+ $RealValue = round($Data["Series"][$Series["X"]]["Data"][$Key],2)." / ".round($Data["Series"][$Series["Y"]]["Data"][$Key],2);
+ if ( $RecordImageMap ) { $this->pChartObject->addToImageMap("CIRCLE",floor($X).",".floor($Y).",".floor($PlotSize+$BorderSize),$this->pChartObject->toHTMLColor($Series["Color"]["R"],$Series["Color"]["G"],$Series["Color"]["B"]),$Description,$RealValue); }
+
+ if( isset($Series["Shape"]) )
+ { $this->pChartObject->drawShape($X,$Y,$Series["Shape"],$PlotSize,$PlotBorder,$BorderSize,$Series["Color"]["R"],$Series["Color"]["G"],$Series["Color"]["B"],$Series["Color"]["Alpha"],$BorderR,$BorderG,$BorderB,$BorderAlpha); }
+ elseif ( $Picture == NULL )
+ {
+ if ( $PlotBorder ) { $this->pChartObject->drawFilledCircle($X,$Y,$PlotSize+$BorderSize,$BorderColor); }
+ $this->pChartObject->drawFilledCircle($X,$Y,$PlotSize,$Color);
+ }
+ else
+ { $this->pChartObject->drawFromPicture($PicType,$Picture,$X-$PicWidth/2,$Y-$PicHeight/2); }
+ }
+ }
+ }
+ }
+ }
+
+ /* Draw a scatter line chart */
+ function drawScatterLineChart($Format=NULL)
+ {
+ $Data = $this->pDataObject->getData();
+ $Palette = $this->pDataObject->getPalette();
+ $RecordImageMap = isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE;
+ $ImageMapTitle = isset($Format["ImageMapTitle"]) ? $Format["ImageMapTitle"] : NULL;
+ $ImageMapPlotSize = isset($Format["ImageMapPlotSize"]) ? $Format["ImageMapPlotSize"] : 10;
+ $ImageMapPrecision = isset($Format["ImageMapPrecision"]) ? $Format["ImageMapPrecision"] : 2;
+
+ /* Parse all the series to draw */
+ foreach($Data["ScatterSeries"] as $Key => $Series)
+ {
+ if ( $Series["isDrawable"] == TRUE )
+ {
+ $SerieX = $Series["X"]; $SerieValuesX = $Data["Series"][$SerieX]["Data"]; $SerieXAxis = $Data["Series"][$SerieX]["Axis"];
+ $SerieY = $Series["Y"]; $SerieValuesY = $Data["Series"][$SerieY]["Data"]; $SerieYAxis = $Data["Series"][$SerieY]["Axis"];
+ $Ticks = $Series["Ticks"];
+ $Weight = $Series["Weight"];
+
+ if ( $ImageMapTitle == NULL ) { $Description = $Data["Series"][$Series["X"]]["Description"]." / ".$Data["Series"][$Series["Y"]]["Description"]; } else { $Description = $ImageMapTitle; }
+
+ $PosArrayX = $this->getPosArray($SerieValuesX,$SerieXAxis);
+ if ( !is_array($PosArrayX) ) { $Value = $PosArrayX; $PosArrayX = ""; $PosArrayX[0] = $Value; }
+ $PosArrayY = $this->getPosArray($SerieValuesY,$SerieYAxis);
+ if ( !is_array($PosArrayY) ) { $Value = $PosArrayY; $PosArrayY = ""; $PosArrayY[0] = $Value; }
+
+ $Color = array("R"=>$Series["Color"]["R"],"G"=>$Series["Color"]["G"],"B"=>$Series["Color"]["B"],"Alpha"=>$Series["Color"]["Alpha"]);
+ if ( $Ticks != 0 ) { $Color["Ticks"] = $Ticks; }
+ if ( $Weight != 0 ) { $Color["Weight"] = $Weight; }
+
+ $LastX = VOID; $LastY = VOID;
+ foreach($PosArrayX as $Key => $Value)
+ {
+ $X = $Value; $Y = $PosArrayY[$Key];
+
+ if ( $X != VOID && $Y != VOID )
+ {
+ $RealValue = round($Data["Series"][$Series["X"]]["Data"][$Key],2)." / ".round($Data["Series"][$Series["Y"]]["Data"][$Key],2);
+ if ( $RecordImageMap ) { $this->pChartObject->addToImageMap("CIRCLE",floor($X).",".floor($Y).",".$ImageMapPlotSize,$this->pChartObject->toHTMLColor($Series["Color"]["R"],$Series["Color"]["G"],$Series["Color"]["B"]),$Description,$RealValue); }
+ }
+
+ if ( $X != VOID && $Y != VOID && $LastX != VOID && $LastY != VOID)
+ $this->pChartObject->drawLine($LastX,$LastY,$X,$Y,$Color);
+
+ $LastX = $X; $LastY = $Y;
+ }
+ }
+ }
+ }
+
+ /* Draw a scatter spline chart */
+ function drawScatterSplineChart($Format=NULL)
+ {
+ $Data = $this->pDataObject->getData();
+ $Palette = $this->pDataObject->getPalette();
+ $RecordImageMap = isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE;
+ $ImageMapTitle = isset($Format["ImageMapTitle"]) ? $Format["ImageMapTitle"] : NULL;
+ $ImageMapPlotSize = isset($Format["ImageMapPlotSize"]) ? $Format["ImageMapPlotSize"] : 10;
+ $ImageMapPrecision = isset($Format["ImageMapPrecision"]) ? $Format["ImageMapPrecision"] : 2;
+
+ foreach($Data["ScatterSeries"] as $Key => $Series)
+ {
+ if ( $Series["isDrawable"] == TRUE )
+ {
+ $SerieX = $Series["X"]; $SerieValuesX = $Data["Series"][$SerieX]["Data"]; $SerieXAxis = $Data["Series"][$SerieX]["Axis"];
+ $SerieY = $Series["Y"]; $SerieValuesY = $Data["Series"][$SerieY]["Data"]; $SerieYAxis = $Data["Series"][$SerieY]["Axis"];
+ $Ticks = $Series["Ticks"];
+ $Weight = $Series["Weight"];
+
+ if ( $ImageMapTitle == NULL ) { $Description = $Data["Series"][$Series["X"]]["Description"]." / ".$Data["Series"][$Series["Y"]]["Description"]; } else { $Description = $ImageMapTitle; }
+
+ $PosArrayX = $this->getPosArray($SerieValuesX,$SerieXAxis);
+ if ( !is_array($PosArrayX) ) { $Value = $PosArrayX; $PosArrayX = ""; $PosArrayX[0] = $Value; }
+ $PosArrayY = $this->getPosArray($SerieValuesY,$SerieYAxis);
+ if ( !is_array($PosArrayY) ) { $Value = $PosArrayY; $PosArrayY = ""; $PosArrayY[0] = $Value; }
+
+ $SplineSettings = array("R"=>$Series["Color"]["R"],"G"=>$Series["Color"]["G"],"B"=>$Series["Color"]["B"],"Alpha"=>$Series["Color"]["Alpha"]);
+ if ( $Ticks != 0 ) { $SplineSettings["Ticks"] = $Ticks; }
+ if ( $Weight != 0 ) { $SplineSettings["Weight"] = $Weight; }
+
+ $LastX = VOID; $LastY = VOID; $WayPoints = ""; $Forces = "";
+ foreach($PosArrayX as $Key => $Value)
+ {
+ $X = $Value; $Y = $PosArrayY[$Key];
+ $Force = $this->pChartObject->getLength($LastX,$LastY,$X,$Y)/5;
+
+ if ( $X != VOID && $Y != VOID )
+ {
+ $RealValue = round($Data["Series"][$Series["X"]]["Data"][$Key],2)." / ".round($Data["Series"][$Series["Y"]]["Data"][$Key],2);
+ if ( $RecordImageMap ) { $this->pChartObject->addToImageMap("CIRCLE",floor($X).",".floor($Y).",".$ImageMapPlotSize,$this->pChartObject->toHTMLColor($Series["Color"]["R"],$Series["Color"]["G"],$Series["Color"]["B"]),$Description,$RealValue); }
+ }
+
+ if ( $X != VOID && $Y != VOID )
+ { $WayPoints[] = array($X,$Y); $Forces[] = $Force; }
+
+ if ( $Y == VOID || $X == VOID )
+ { $SplineSettings["Forces"] = $Forces; $this->pChartObject->drawSpline($WayPoints,$SplineSettings); $WayPoints = ""; $Forces = "";}
+
+ $LastX = $X; $LastY = $Y;
+ }
+ $SplineSettings["Forces"] = $Forces;
+ $this->pChartObject->drawSpline($WayPoints,$SplineSettings);
+ }
+ }
+ }
+
+ /* Return the scaled plot position */
+ function getPosArray($Values,$AxisID)
+ {
+ $Data = $this->pDataObject->getData();
+
+ if ( !is_array($Values) ) { $Values = array($Values); }
+
+ if ( $Data["Axis"][$AxisID]["Identity"] == AXIS_X )
+ {
+ $Height = ($this->pChartObject->GraphAreaX2 - $this->pChartObject->GraphAreaX1) - $Data["Axis"][$AxisID]["Margin"]*2;
+ $ScaleHeight = $Data["Axis"][$AxisID]["ScaleMax"] - $Data["Axis"][$AxisID]["ScaleMin"];
+ $Step = $Height / $ScaleHeight;
+
+ $Result = "";
+ foreach($Values as $Key => $Value)
+ {
+ if ( $Value == VOID )
+ $Result[] = VOID;
+ else
+ $Result[] = $this->pChartObject->GraphAreaX1 + $Data["Axis"][$AxisID]["Margin"] + ($Step * ($Value-$Data["Axis"][$AxisID]["ScaleMin"]));
+ }
+
+ if ( count($Result) == 1 ) { return($Result[0]); } else { return($Result); }
+ }
+ else
+ {
+ $Height = ($this->pChartObject->GraphAreaY2 - $this->pChartObject->GraphAreaY1) - $Data["Axis"][$AxisID]["Margin"]*2;
+ $ScaleHeight = $Data["Axis"][$AxisID]["ScaleMax"] - $Data["Axis"][$AxisID]["ScaleMin"];
+ $Step = $Height / $ScaleHeight;
+
+ $Result = "";
+ foreach($Values as $Key => $Value)
+ {
+ if ( $Value == VOID )
+ $Result[] = VOID;
+ else
+ $Result[] = $this->pChartObject->GraphAreaY2 - $Data["Axis"][$AxisID]["Margin"] - ($Step * ($Value-$Data["Axis"][$AxisID]["ScaleMin"]));
+ }
+
+ if ( count($Result) == 1 ) { return($Result[0]); } else { return($Result); }
+ }
+ }
+
+ /* Draw the legend of the active series */
+ function drawScatterLegend($X,$Y,$Format="")
+ {
+ $Family = isset($Format["Family"]) ? $Format["Family"] : LEGEND_FAMILY_BOX;
+ $FontName = isset($Format["FontName"]) ? $Format["FontName"] : $this->pChartObject->FontName;
+ $FontSize = isset($Format["FontSize"]) ? $Format["FontSize"] : $this->pChartObject->FontSize;
+ $FontR = isset($Format["FontR"]) ? $Format["FontR"] : $this->pChartObject->FontColorR;
+ $FontG = isset($Format["FontG"]) ? $Format["FontG"] : $this->pChartObject->FontColorG;
+ $FontB = isset($Format["FontB"]) ? $Format["FontB"] : $this->pChartObject->FontColorB;
+ $BoxWidth = isset($Format["BoxWidth"]) ? $Format["BoxWidth"] : 5;
+ $BoxHeight = isset($Format["BoxHeight"]) ? $Format["BoxHeight"] : 5;
+ $IconAreaWidth = isset($Format["IconAreaWidth"]) ? $Format["IconAreaWidth"] : $BoxWidth;
+ $IconAreaHeight = isset($Format["IconAreaHeight"]) ? $Format["IconAreaHeight"] : $BoxHeight;
+ $XSpacing = isset($Format["XSpacing"]) ? $Format["XSpacing"] : 5;
+ $Margin = isset($Format["Margin"]) ? $Format["Margin"] : 5;
+ $R = isset($Format["R"]) ? $Format["R"] : 200;
+ $G = isset($Format["G"]) ? $Format["G"] : 200;
+ $B = isset($Format["B"]) ? $Format["B"] : 200;
+ $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
+ $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : 255;
+ $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : 255;
+ $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : 255;
+ $Surrounding = isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL;
+ $Style = isset($Format["Style"]) ? $Format["Style"] : LEGEND_ROUND;
+ $Mode = isset($Format["Mode"]) ? $Format["Mode"] : LEGEND_VERTICAL;
+
+ if ( $Surrounding != NULL ) { $BorderR = $R + $Surrounding; $BorderG = $G + $Surrounding; $BorderB = $B + $Surrounding; }
+
+ $Data = $this->pDataObject->getData();
+
+ foreach($Data["ScatterSeries"] as $Key => $Series)
+ {
+ if ( $Series["isDrawable"] == TRUE && isset($Series["Picture"]))
+ {
+ list($PicWidth,$PicHeight) = $this->pChartObject->getPicInfo($Series["Picture"]);
+ if ( $IconAreaWidth < $PicWidth ) { $IconAreaWidth = $PicWidth; }
+ if ( $IconAreaHeight < $PicHeight ) { $IconAreaHeight = $PicHeight; }
+ }
+ }
+
+ $YStep = max($this->pChartObject->FontSize,$IconAreaHeight) + 5;
+ $XStep = $IconAreaWidth + 5;
+ $XStep = $XSpacing;
+
+ $Boundaries = ""; $Boundaries["L"] = $X; $Boundaries["T"] = $Y; $Boundaries["R"] = 0; $Boundaries["B"] = 0; $vY = $Y; $vX = $X;
+ foreach($Data["ScatterSeries"] as $Key => $Series)
+ {
+ if ( $Series["isDrawable"] == TRUE )
+ {
+ if ( $Mode == LEGEND_VERTICAL )
+ {
+ $BoxArray = $this->pChartObject->getTextBox($vX+$IconAreaWidth+4,$vY+$IconAreaHeight/2,$FontName,$FontSize,0,$Series["Description"]);
+
+ if ( $Boundaries["T"] > $BoxArray[2]["Y"]+$IconAreaHeight/2 ) { $Boundaries["T"] = $BoxArray[2]["Y"]+$IconAreaHeight/2; }
+ if ( $Boundaries["R"] < $BoxArray[1]["X"]+2 ) { $Boundaries["R"] = $BoxArray[1]["X"]+2; }
+ if ( $Boundaries["B"] < $BoxArray[1]["Y"]+2+$IconAreaHeight/2 ) { $Boundaries["B"] = $BoxArray[1]["Y"]+2+$IconAreaHeight/2; }
+
+ $Lines = preg_split("/\n/",$Series["Description"]);
+ $vY = $vY + max($this->pChartObject->FontSize*count($Lines),$IconAreaHeight) + 5;
+ }
+ elseif ( $Mode == LEGEND_HORIZONTAL )
+ {
+ $Lines = preg_split("/\n/",$Series["Description"]);
+ $Width = "";
+ foreach($Lines as $Key => $Value)
+ {
+ $BoxArray = $this->pChartObject->getTextBox($vX+$IconAreaWidth+6,$Y+$IconAreaHeight/2+(($this->pChartObject->FontSize+3)*$Key),$FontName,$FontSize,0,$Value);
+
+ if ( $Boundaries["T"] > $BoxArray[2]["Y"]+$IconAreaHeight/2 ) { $Boundaries["T"] = $BoxArray[2]["Y"]+$IconAreaHeight/2; }
+ if ( $Boundaries["R"] < $BoxArray[1]["X"]+2 ) { $Boundaries["R"] = $BoxArray[1]["X"]+2; }
+ if ( $Boundaries["B"] < $BoxArray[1]["Y"]+2+$IconAreaHeight/2 ) { $Boundaries["B"] = $BoxArray[1]["Y"]+2+$IconAreaHeight/2; }
+
+ $Width[] = $BoxArray[1]["X"];
+ }
+
+ $vX=max($Width)+$XStep;
+ }
+ }
+ }
+ $vY=$vY-$YStep; $vX=$vX-$XStep;
+
+ $TopOffset = $Y - $Boundaries["T"];
+ if ( $Boundaries["B"]-($vY+$IconAreaHeight) < $TopOffset ) { $Boundaries["B"] = $vY+$IconAreaHeight+$TopOffset; }
+
+ if ( $Style == LEGEND_ROUND )
+ $this->pChartObject->drawRoundedFilledRectangle($Boundaries["L"]-$Margin,$Boundaries["T"]-$Margin,$Boundaries["R"]+$Margin,$Boundaries["B"]+$Margin,$Margin,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"BorderR"=>$BorderR,"BorderG"=>$BorderG,"BorderB"=>$BorderB));
+ elseif ( $Style == LEGEND_BOX )
+ $this->pChartObject->drawFilledRectangle($Boundaries["L"]-$Margin,$Boundaries["T"]-$Margin,$Boundaries["R"]+$Margin,$Boundaries["B"]+$Margin,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"BorderR"=>$BorderR,"BorderG"=>$BorderG,"BorderB"=>$BorderB));
+
+ $RestoreShadow = $this->pChartObject->Shadow; $this->Shadow = FALSE;
+ foreach($Data["ScatterSeries"] as $Key => $Series)
+ {
+ if ( $Series["isDrawable"] == TRUE )
+ {
+ $R = $Series["Color"]["R"]; $G = $Series["Color"]["G"]; $B = $Series["Color"]["B"];
+ $Ticks = $Series["Ticks"]; $Weight = $Series["Weight"];
+
+ if ( isset($Series["Picture"]) )
+ {
+ $Picture = $Series["Picture"];
+ list($PicWidth,$PicHeight) = $this->pChartObject->getPicInfo($Picture);
+ $PicX = $X+$IconAreaWidth/2; $PicY = $Y+$IconAreaHeight/2;
+
+ $this->pChartObject->drawFromPNG($PicX-$PicWidth/2,$PicY-$PicHeight/2,$Picture);
+ }
+ else
+ {
+ if ( $Family == LEGEND_FAMILY_BOX )
+ {
+ if ( $BoxWidth != $IconAreaWidth ) { $XOffset = floor(($IconAreaWidth-$BoxWidth)/2); } else { $XOffset = 0; }
+ if ( $BoxHeight != $IconAreaHeight ) { $YOffset = floor(($IconAreaHeight-$BoxHeight)/2); } else { $YOffset = 0; }
+
+ $this->pChartObject->drawFilledRectangle($X+1+$XOffset,$Y+1+$YOffset,$X+$BoxWidth+$XOffset+1,$Y+$BoxHeight+1+$YOffset,array("R"=>0,"G"=>0,"B"=>0,"Alpha"=>20));
+ $this->pChartObject->drawFilledRectangle($X+$XOffset,$Y+$YOffset,$X+$BoxWidth+$XOffset,$Y+$BoxHeight+$YOffset,array("R"=>$R,"G"=>$G,"B"=>$B,"Surrounding"=>20));
+ }
+ elseif ( $Family == LEGEND_FAMILY_CIRCLE )
+ {
+ $this->pChartObject->drawFilledCircle($X+1+$IconAreaWidth/2,$Y+1+$IconAreaHeight/2,min($IconAreaHeight/2,$IconAreaWidth/2),array("R"=>0,"G"=>0,"B"=>0,"Alpha"=>20));
+ $this->pChartObject->drawFilledCircle($X+$IconAreaWidth/2,$Y+$IconAreaHeight/2,min($IconAreaHeight/2,$IconAreaWidth/2),array("R"=>$R,"G"=>$G,"B"=>$B,"Surrounding"=>20));
+ }
+ elseif ( $Family == LEGEND_FAMILY_LINE )
+ {
+ $this->pChartObject->drawLine($X+1,$Y+1+$IconAreaHeight/2,$X+1+$IconAreaWidth,$Y+1+$IconAreaHeight/2,array("R"=>0,"G"=>0,"B"=>0,"Alpha"=>20,"Ticks"=>$Ticks,"Weight"=>$Weight));
+ $this->pChartObject->drawLine($X,$Y+$IconAreaHeight/2,$X+$IconAreaWidth,$Y+$IconAreaHeight/2,array("R"=>$R,"G"=>$G,"B"=>$B,"Ticks"=>$Ticks,"Weight"=>$Weight));
+ }
+ }
+
+ if ( $Mode == LEGEND_VERTICAL )
+ {
+ $Lines = preg_split("/\n/",$Series["Description"]);
+ foreach($Lines as $Key => $Value)
+ $this->pChartObject->drawText($X+$IconAreaWidth+4,$Y+$IconAreaHeight/2+(($this->pChartObject->FontSize+3)*$Key),$Value,array("R"=>$FontR,"G"=>$FontG,"B"=>$FontB,"Align"=>TEXT_ALIGN_MIDDLELEFT));
+
+ $Y=$Y+max($this->pChartObject->FontSize*count($Lines),$IconAreaHeight) + 5;
+ }
+ elseif ( $Mode == LEGEND_HORIZONTAL )
+ {
+ $Lines = preg_split("/\n/",$Series["Description"]);
+ $Width = "";
+ foreach($Lines as $Key => $Value)
+ {
+ $BoxArray = $this->pChartObject->drawText($X+$IconAreaWidth+4,$Y+$IconAreaHeight/2+(($this->pChartObject->FontSize+3)*$Key),$Value,array("R"=>$FontR,"G"=>$FontG,"B"=>$FontB,"Align"=>TEXT_ALIGN_MIDDLELEFT));
+ $Width[] = $BoxArray[1]["X"];
+ }
+ $X=max($Width)+2+$XStep;
+ }
+ }
+ }
+
+ $this->Shadow = $RestoreShadow;
+ }
+
+ /* Get the legend box size */
+ function getScatterLegendSize($Format="")
+ {
+ $FontName = isset($Format["FontName"]) ? $Format["FontName"] : $this->pChartObject->FontName;
+ $FontSize = isset($Format["FontSize"]) ? $Format["FontSize"] : $this->pChartObject->FontSize;
+ $BoxSize = isset($Format["BoxSize"]) ? $Format["BoxSize"] : 5;
+ $Margin = isset($Format["Margin"]) ? $Format["Margin"] : 5;
+ $Style = isset($Format["Style"]) ? $Format["Style"] : LEGEND_ROUND;
+ $Mode = isset($Format["Mode"]) ? $Format["Mode"] : LEGEND_VERTICAL;
+
+ $YStep = max($this->pChartObject->FontSize,$BoxSize) + 5;
+ $XStep = $BoxSize + 5;
+
+ $X=100; $Y=100;
+
+ $Data = $this->pDataObject->getData();
+
+ foreach($Data["ScatterSeries"] as $Key => $Series)
+ {
+ if ( $Series["isDrawable"] == TRUE && isset($Series["Picture"]))
+ {
+ list($PicWidth,$PicHeight) = $this->pChartObject->getPicInfo($Series["Picture"]);
+ if ( $IconAreaWidth < $PicWidth ) { $IconAreaWidth = $PicWidth; }
+ if ( $IconAreaHeight < $PicHeight ) { $IconAreaHeight = $PicHeight; }
+ }
+ }
+
+ $YStep = max($this->pChartObject->FontSize,$IconAreaHeight) + 5;
+ $XStep = $IconAreaWidth + 5;
+ $XStep = $XSpacing;
+
+ $Boundaries = ""; $Boundaries["L"] = $X; $Boundaries["T"] = $Y; $Boundaries["R"] = 0; $Boundaries["B"] = 0; $vY = $Y; $vX = $X;
+ foreach($Data["ScatterSeries"] as $Key => $Series)
+ {
+ if ( $Series["isDrawable"] == TRUE )
+ {
+ if ( $Mode == LEGEND_VERTICAL )
+ {
+ $BoxArray = $this->pChartObject->getTextBox($vX+$IconAreaWidth+4,$vY+$IconAreaHeight/2,$FontName,$FontSize,0,$Series["Description"]);
+
+ if ( $Boundaries["T"] > $BoxArray[2]["Y"]+$IconAreaHeight/2 ) { $Boundaries["T"] = $BoxArray[2]["Y"]+$IconAreaHeight/2; }
+ if ( $Boundaries["R"] < $BoxArray[1]["X"]+2 ) { $Boundaries["R"] = $BoxArray[1]["X"]+2; }
+ if ( $Boundaries["B"] < $BoxArray[1]["Y"]+2+$IconAreaHeight/2 ) { $Boundaries["B"] = $BoxArray[1]["Y"]+2+$IconAreaHeight/2; }
+
+ $Lines = preg_split("/\n/",$Series["Description"]);
+ $vY = $vY + max($this->pChartObject->FontSize*count($Lines),$IconAreaHeight) + 5;
+ }
+ elseif ( $Mode == LEGEND_HORIZONTAL )
+ {
+ $Lines = preg_split("/\n/",$Series["Description"]);
+ $Width = "";
+ foreach($Lines as $Key => $Value)
+ {
+ $BoxArray = $this->pChartObject->getTextBox($vX+$IconAreaWidth+6,$Y+$IconAreaHeight/2+(($this->pChartObject->FontSize+3)*$Key),$FontName,$FontSize,0,$Value);
+
+ if ( $Boundaries["T"] > $BoxArray[2]["Y"]+$IconAreaHeight/2 ) { $Boundaries["T"] = $BoxArray[2]["Y"]+$IconAreaHeight/2; }
+ if ( $Boundaries["R"] < $BoxArray[1]["X"]+2 ) { $Boundaries["R"] = $BoxArray[1]["X"]+2; }
+ if ( $Boundaries["B"] < $BoxArray[1]["Y"]+2+$IconAreaHeight/2 ) { $Boundaries["B"] = $BoxArray[1]["Y"]+2+$IconAreaHeight/2; }
+
+ $Width[] = $BoxArray[1]["X"];
+ }
+
+ $vX=max($Width)+$XStep;
+ }
+ }
+ }
+ $vY=$vY-$YStep; $vX=$vX-$XStep;
+
+ $TopOffset = $Y - $Boundaries["T"];
+ if ( $Boundaries["B"]-($vY+$BoxSize) < $TopOffset ) { $Boundaries["B"] = $vY+$BoxSize+$TopOffset; }
+
+ $Width = ($Boundaries["R"]+$Margin) - ($Boundaries["L"]-$Margin);
+ $Height = ($Boundaries["B"]+$Margin) - ($Boundaries["T"]-$Margin);
+
+ return(array("Width"=>$Width,"Height"=>$Height));
+ }
+
+ /* Draw the line of best fit */
+ function drawScatterBestFit($Format="")
+ {
+ $Ticks = isset($Format["Ticks"]) ? $Format["Ticks"] : 0;
+
+ $Data = $this->pDataObject->getData();
+
+ foreach($Data["ScatterSeries"] as $Key => $Series)
+ {
+ if ( $Series["isDrawable"] == TRUE )
+ {
+ $SerieX = $Series["X"]; $SerieValuesX = $Data["Series"][$SerieX]["Data"]; $SerieXAxis = $Data["Series"][$SerieX]["Axis"];
+ $SerieY = $Series["Y"]; $SerieValuesY = $Data["Series"][$SerieY]["Data"]; $SerieYAxis = $Data["Series"][$SerieY]["Axis"];
+
+ $Color = array("R"=>$Series["Color"]["R"],"G"=>$Series["Color"]["G"],"B"=>$Series["Color"]["B"],"Alpha"=>$Series["Color"]["Alpha"]);
+ $Color["Ticks"] = $Ticks;
+
+ $PosArrayX = $Data["Series"][$Series["X"]]["Data"];
+ $PosArrayY = $Data["Series"][$Series["Y"]]["Data"];
+
+ $Sxy = 0; $Sx = 0; $Sy = 0; $Sxx = 0;
+ foreach($PosArrayX as $Key => $Value)
+ {
+ $X = $Value; $Y = $PosArrayY[$Key];
+
+ $Sxy = $Sxy + $X*$Y;
+ $Sx = $Sx + $X;
+ $Sy = $Sy + $Y;
+ $Sxx = $Sxx + $X*$X;
+ }
+
+ $n = count($PosArrayX);
+
+ if ((($n*$Sxx) == ($Sx*$Sx)))
+ {
+ $X1 = $this->getPosArray($Data["Axis"][$SerieXAxis]["ScaleMin"],$SerieXAxis);
+ $X2 = $X1;
+ $Y1 = $this->pChartObject->GraphAreaY1;
+ $Y2 = $this->pChartObject->GraphAreaY2;
+ }
+ else
+ {
+ $M = (($n*$Sxy)-($Sx*$Sy)) / (($n*$Sxx)-($Sx*$Sx));
+ $B = (($Sy)-($M*$Sx))/($n);
+
+ $X1 = $this->getPosArray($Data["Axis"][$SerieXAxis]["ScaleMin"],$SerieXAxis);
+ $Y1 = $this->getPosArray($M * $Data["Axis"][$SerieXAxis]["ScaleMin"] + $B,$SerieYAxis);
+ $X2 = $this->getPosArray($Data["Axis"][$SerieXAxis]["ScaleMax"],$SerieXAxis);
+ $Y2 = $this->getPosArray($M * $Data["Axis"][$SerieXAxis]["ScaleMax"] + $B,$SerieYAxis);
+
+ $RealM = -($Y2-$Y1)/($X2-$X1);
+
+ if ( $Y1 < $this->pChartObject->GraphAreaY1 ) { $X1 = $X1 + ($this->pChartObject->GraphAreaY1-$Y1/$RealM); $Y1 = $this->pChartObject->GraphAreaY1; }
+ if ( $Y1 > $this->pChartObject->GraphAreaY2 ) { $X1 = $X1 + ($Y1-$this->pChartObject->GraphAreaY2)/$RealM; $Y1 = $this->pChartObject->GraphAreaY2; }
+ if ( $Y2 < $this->pChartObject->GraphAreaY1 ) { $X2 = $X2 - ($this->pChartObject->GraphAreaY1-$Y2)/$RealM; $Y2 = $this->pChartObject->GraphAreaY1; }
+ if ( $Y2 > $this->pChartObject->GraphAreaY2 ) { $X2 = $X2 - ($Y2-$this->pChartObject->GraphAreaY2)/$RealM; $Y2 = $this->pChartObject->GraphAreaY2; }
+ }
+
+ $this->pChartObject->drawLine($X1,$Y1,$X2,$Y2,$Color);
+ }
+ }
+ }
+
+ function writeScatterLabel($ScatterSerieID,$Points,$Format="")
+ {
+ $OverrideTitle = isset($Format["OverrideTitle"]) ? $Format["OverrideTitle"] : NULL;
+ $DrawPoint = isset($Format["DrawPoint"]) ? $Format["DrawPoint"] : LABEL_POINT_BOX;
+ $Decimals = isset($Format["Decimals"]) ? $Format["Decimals"] : NULL;
+
+ $Data = $this->pDataObject->getData();
+ $Palette = $this->pDataObject->getPalette();
+
+ if ( !is_array($Points) ) { $Point = $Points; $Points = ""; $Points[0] = $Point; }
+
+ if ( !isset($Data["ScatterSeries"][$ScatterSerieID]) )
+ return(0);
+
+ $Series = $Data["ScatterSeries"][$ScatterSerieID];
+ $SerieX = $Series["X"]; $SerieValuesX = $Data["Series"][$SerieX]["Data"]; $SerieXAxis = $Data["Series"][$SerieX]["Axis"];
+ $SerieY = $Series["Y"]; $SerieValuesY = $Data["Series"][$SerieY]["Data"]; $SerieYAxis = $Data["Series"][$SerieY]["Axis"];
+
+ $PosArrayX = $this->getPosArray($SerieValuesX,$SerieXAxis);
+ if ( !is_array($PosArrayX) ) { $Value = $PosArrayX; $PosArrayX = ""; $PosArrayX[0] = $Value; }
+ $PosArrayY = $this->getPosArray($SerieValuesY,$SerieYAxis);
+ if ( !is_array($PosArrayY) ) { $Value = $PosArrayY; $PosArrayY = ""; $PosArrayY[0] = $Value; }
+
+ foreach($Points as $Key => $Point)
+ {
+ if ( isset($PosArrayX[$Point]) && isset($PosArrayY[$Point]) )
+ {
+ $X = floor($PosArrayX[$Point]);
+ $Y = floor($PosArrayY[$Point]);
+
+ if ( $DrawPoint == LABEL_POINT_CIRCLE )
+ $this->pChartObject->drawFilledCircle($X,$Y,3,array("R"=>255,"G"=>255,"B"=>255,"BorderR"=>0,"BorderG"=>0,"BorderB"=>0));
+ elseif ( $DrawPoint == LABEL_POINT_BOX )
+ $this->pChartObject->drawFilledRectangle($X-2,$Y-2,$X+2,$Y+2,array("R"=>255,"G"=>255,"B"=>255,"BorderR"=>0,"BorderG"=>0,"BorderB"=>0));
+
+ $Serie = "";
+ $Serie["R"] = $Series["Color"]["R"];
+ $Serie["G"] = $Series["Color"]["G"];
+ $Serie["B"] = $Series["Color"]["B"];
+ $Serie["Alpha"] = $Series["Color"]["Alpha"];
+
+ $XAxisMode = $Data["Axis"][$SerieXAxis]["Display"];
+ $XAxisFormat = $Data["Axis"][$SerieXAxis]["Format"];
+ $XAxisUnit = $Data["Axis"][$SerieXAxis]["Unit"];
+ if ( $Decimals == NULL ) { $XValue = $SerieValuesX[$Point]; } else { $XValue = round($SerieValuesX[$Point],$Decimals); }
+ $XValue = $this->pChartObject->scaleFormat($XValue,$XAxisMode,$XAxisFormat,$XAxisUnit);
+
+ $YAxisMode = $Data["Axis"][$SerieYAxis]["Display"];
+ $YAxisFormat = $Data["Axis"][$SerieYAxis]["Format"];
+ $YAxisUnit = $Data["Axis"][$SerieYAxis]["Unit"];
+ if ( $Decimals == NULL ) { $YValue = $SerieValuesY[$Point]; } else { $YValue = round($SerieValuesY[$Point],$Decimals); }
+ $YValue = $this->pChartObject->scaleFormat($YValue,$YAxisMode,$YAxisFormat,$YAxisUnit);
+
+ $Caption = $XValue." / ".$YValue;
+
+ if ( isset($Series["Description"]) )
+ $Description = $Series["Description"];
+ else
+ $Description = "No description";
+
+ $Series = "";
+ $Series[] = array("Format"=>$Serie,"Caption"=>$Caption);
+
+ $this->pChartObject->drawLabelBox($X,$Y-3,$Description,$Series,$Format);
+ }
+ }
+ }
+ }
+?> \ No newline at end of file
diff --git a/For Weekly Test/tricode/class/pSplit.class.php b/For Weekly Test/tricode/class/pSplit.class.php
new file mode 100644
index 0000000..0a62c3d
--- /dev/null
+++ b/For Weekly Test/tricode/class/pSplit.class.php
@@ -0,0 +1,131 @@
+<?php
+ /*
+ pSplit - class to draw spline splitted charts
+
+ Version : 2.1.2
+ Made by : Jean-Damien POGOLOTTI
+ Last Update : 03/08/11
+
+ This file can be distributed under the license you can find at :
+
+ http://www.pchart.net/license
+
+ You can find the whole class documentation on the pChart web site.
+ */
+
+ define("TEXT_POS_TOP" , 690001);
+ define("TEXT_POS_RIGHT" , 690002);
+
+ /* pSplit class definition */
+ class pSplit
+ {
+ var $pChartObject;
+
+ /* Class creator */
+ function pSplit()
+ { }
+
+ /* Create the encoded string */
+ function drawSplitPath($Object,$Values,$Format="")
+ {
+ $this->pChartObject = $Object;
+
+ $Spacing = isset($Format["Spacing"]) ? $Format["Spacing"] : 20;
+ $TextPadding = isset($Format["TextPadding"]) ? $Format["TextPadding"] : 2;
+ $TextPos = isset($Format["TextPos"]) ? $Format["TextPos"] : TEXT_POS_TOP;
+ $Surrounding = isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL;
+ $Force = isset($Format["Force"]) ? $Format["Force"] : 70;
+ $Segments = isset($Format["Segments"]) ? $Format["Segments"] : 15;
+ $FontSize = $Object->FontSize;
+ $X1 = $Object->GraphAreaX1;
+ $Y1 = $Object->GraphAreaY1;
+ $X2 = $Object->GraphAreaX2;
+ $Y2 = $Object->GraphAreaY2;
+
+ /* Data Processing */
+ $Data = $Values->getData();
+ $Palette = $Values->getPalette();
+
+ $LabelSerie = $Data["Abscissa"];
+ $DataSerie = "";
+
+ foreach($Data["Series"] as $SerieName => $Value)
+ { if ( $SerieName != $LabelSerie && $DataSerie == "" ) { $DataSerie = $SerieName; } }
+
+ $DataSerieSum = array_sum($Data["Series"][$DataSerie]["Data"]);
+ $DataSerieCount = count($Data["Series"][$DataSerie]["Data"]);
+
+ /* Scale Processing */
+ if ( $TextPos == TEXT_POS_RIGHT )
+ $YScale = (($Y2-$Y1) - (($DataSerieCount+1)*$Spacing)) / $DataSerieSum;
+ else
+ $YScale = (($Y2-$Y1) - ($DataSerieCount*$Spacing)) / $DataSerieSum;
+ $LeftHeight = $DataSerieSum * $YScale;
+
+ /* Re-compute graph width depending of the text mode choosen */
+ if ( $TextPos == TEXT_POS_RIGHT )
+ {
+ $MaxWidth = 0;
+ foreach($Data["Series"][$LabelSerie]["Data"] as $Key => $Label)
+ {
+ $Boundardies = $Object->getTextBox(0,0,$Object->FontName,$Object->FontSize,0,$Label);
+ if ( $Boundardies[1]["X"] > $MaxWidth ) { $MaxWidth = $Boundardies[1]["X"] + $TextPadding*2; }
+ }
+ $X2 = $X2 - $MaxWidth;
+ }
+
+ /* Drawing */
+ $LeftY = ((($Y2-$Y1) / 2) + $Y1) - ($LeftHeight/2);
+ $RightY = $Y1;
+ $VectorX = (($X2-$X1) / 2);
+
+ foreach($Data["Series"][$DataSerie]["Data"] as $Key => $Value)
+ {
+ if ( isset($Data["Series"][$LabelSerie]["Data"][$Key]) )
+ $Label = $Data["Series"][$LabelSerie]["Data"][$Key];
+ else
+ $Label = "-";
+
+ $LeftY1 = $LeftY;
+ $LeftY2 = $LeftY + $Value * $YScale;
+
+ $RightY1 = $RightY + $Spacing;
+ $RightY2 = $RightY + $Spacing + $Value * $YScale;;
+
+ $Settings = array("R"=>$Palette[$Key]["R"],"G"=>$Palette[$Key]["G"],"B"=>$Palette[$Key]["B"],"Alpha"=>$Palette[$Key]["Alpha"],"NoDraw"=>TRUE,"Segments"=>$Segments,"Surrounding"=>$Surrounding);
+
+ $PolyGon = "";
+
+ $Angle = $Object->getAngle($X2,$RightY1,$X1,$LeftY1);
+ $VectorX1 = cos(deg2rad($Angle+90)) * $Force + ($X2-$X1)/2 + $X1;
+ $VectorY1 = sin(deg2rad($Angle+90)) * $Force + ($RightY1-$LeftY1)/2 + $LeftY1;
+ $VectorX2 = cos(deg2rad($Angle-90)) * $Force + ($X2-$X1)/2 + $X1;
+ $VectorY2 = sin(deg2rad($Angle-90)) * $Force + ($RightY1-$LeftY1)/2 + $LeftY1;
+
+ $Points = $Object->drawBezier($X1,$LeftY1,$X2,$RightY1,$VectorX1,$VectorY1,$VectorX2,$VectorY2,$Settings);
+ foreach($Points as $Key => $Pos) { $PolyGon[] = $Pos["X"]; $PolyGon[] = $Pos["Y"]; }
+
+
+ $Angle = $Object->getAngle($X2,$RightY2,$X1,$LeftY2);
+ $VectorX1 = cos(deg2rad($Angle+90)) * $Force + ($X2-$X1)/2 +$X1;
+ $VectorY1 = sin(deg2rad($Angle+90)) * $Force + ($RightY2-$LeftY2)/2 + $LeftY2;
+ $VectorX2 = cos(deg2rad($Angle-90)) * $Force + ($X2-$X1)/2 +$X1;
+ $VectorY2 = sin(deg2rad($Angle-90)) * $Force + ($RightY2-$LeftY2)/2 + $LeftY2;
+
+ $Points = $Object->drawBezier($X1,$LeftY2,$X2,$RightY2,$VectorX1,$VectorY1,$VectorX2,$VectorY2,$Settings);
+ $Points = array_reverse($Points);
+ foreach($Points as $Key => $Pos) { $PolyGon[] = $Pos["X"]; $PolyGon[] = $Pos["Y"]; }
+
+ $Object->drawPolygon($PolyGon,$Settings);
+
+ if ( $TextPos == TEXT_POS_RIGHT )
+ $Object->drawText($X2+$TextPadding,($RightY2-$RightY1)/2+$RightY1,$Label,array("Align"=>TEXT_ALIGN_MIDDLELEFT));
+ else
+ $Object->drawText($X2,$RightY1-$TextPadding,$Label,array("Align"=>TEXT_ALIGN_BOTTOMRIGHT));
+
+ $LeftY = $LeftY2;
+ $RightY = $RightY2;
+ }
+ }
+ }
+?> \ No newline at end of file
diff --git a/For Weekly Test/tricode/class/pSpring.class.php b/For Weekly Test/tricode/class/pSpring.class.php
new file mode 100644
index 0000000..fcfc8f2
--- /dev/null
+++ b/For Weekly Test/tricode/class/pSpring.class.php
@@ -0,0 +1,868 @@
+<?php
+ /*
+ pSpring - class to draw spring graphs
+
+ Version : 2.1.2
+ Made by : Jean-Damien POGOLOTTI
+ Last Update : 03/08/11
+
+ This file can be distributed under the license you can find at :
+
+ http://www.pchart.net/license
+
+ You can find the whole class documentation on the pChart web site.
+ */
+
+ define("NODE_TYPE_FREE" , 690001);
+ define("NODE_TYPE_CENTRAL" , 690002);
+
+ define("NODE_SHAPE_CIRCLE" , 690011);
+ define("NODE_SHAPE_TRIANGLE" , 690012);
+ define("NODE_SHAPE_SQUARE" , 690013);
+
+ define("ALGORITHM_RANDOM" , 690021);
+ define("ALGORITHM_WEIGHTED" , 690022);
+ define("ALGORITHM_CIRCULAR" , 690023);
+ define("ALGORITHM_CENTRAL" , 690024);
+
+ define("LABEL_CLASSIC" , 690031);
+ define("LABEL_LIGHT" , 690032);
+
+ /* pSpring class definition */
+ class pSpring
+ {
+ var $History;
+ var $pChartObject;
+ var $Data;
+ var $Links;
+ var $X1;
+ var $Y1;
+ var $X2;
+ var $Y2;
+ var $AutoComputeFreeZone;
+ var $Labels;
+
+ /* Class creator */
+ function pSpring()
+ {
+ /* Initialise data arrays */
+ $this->Data = "";
+ $this->Links = "";
+
+ /* Set nodes defaults */
+ $this->Default["R"] = 255;
+ $this->Default["G"] = 255;
+ $this->Default["B"] = 255;
+ $this->Default["Alpha"] = 100;
+ $this->Default["BorderR"] = 0;
+ $this->Default["BorderG"] = 0;
+ $this->Default["BorderB"] = 0;
+ $this->Default["BorderAlpha"] = 100;
+ $this->Default["Surrounding"] = NULL;
+ $this->Default["BackgroundR"] = 255;
+ $this->Default["BackgroundG"] = 255;
+ $this->Default["BackgroundB"] = 255;
+ $this->Default["BackgroundAlpha"] = 0;
+ $this->Default["Force"] = 1;
+ $this->Default["NodeType"] = NODE_TYPE_FREE;
+ $this->Default["Size"] = 5;
+ $this->Default["Shape"] = NODE_SHAPE_CIRCLE;
+ $this->Default["FreeZone"] = 40;
+ $this->Default["LinkR"] = 0;
+ $this->Default["LinkG"] = 0;
+ $this->Default["LinkB"] = 0;
+ $this->Default["LinkAlpha"] = 0;
+
+ $this->Labels["Type"] = LABEL_CLASSIC;
+ $this->Labels["R"] = 0;
+ $this->Labels["G"] = 0;
+ $this->Labels["B"] = 0;
+ $this->Labels["Alpha"] = 100;
+
+ $this->AutoComputeFreeZone = FALSE;
+ }
+
+ /* Set default links options */
+ function setLinkDefaults($Settings="")
+ {
+ if ( isset($Settings["R"]) ) { $this->Default["LinkR"] = $Settings["R"]; }
+ if ( isset($Settings["G"]) ) { $this->Default["LinkG"] = $Settings["G"]; }
+ if ( isset($Settings["B"]) ) { $this->Default["LinkB"] = $Settings["B"]; }
+ if ( isset($Settings["Alpha"]) ) { $this->Default["LinkAlpha"] = $Settings["Alpha"]; }
+ }
+
+ /* Set default links options */
+ function setLabelsSettings($Settings="")
+ {
+ if ( isset($Settings["Type"]) ) { $this->Labels["Type"] = $Settings["Type"]; }
+ if ( isset($Settings["R"]) ) { $this->Labels["R"] = $Settings["R"]; }
+ if ( isset($Settings["G"]) ) { $this->Labels["G"] = $Settings["G"]; }
+ if ( isset($Settings["B"]) ) { $this->Labels["B"] = $Settings["B"]; }
+ if ( isset($Settings["Alpha"]) ) { $this->Labels["Alpha"] = $Settings["Alpha"]; }
+ }
+
+ /* Auto compute the FreeZone size based on the number of connections */
+ function autoFreeZone()
+ {
+ /* Check connections reciprocity */
+ foreach($this->Data as $Key => $Settings)
+ {
+ if ( isset($Settings["Connections"]) )
+ { $this->Data[$Key]["FreeZone"] = count($Settings["Connections"])*10 + 20; }
+ else
+ { $this->Data[$Key]["FreeZone"] = 20; }
+ }
+
+ }
+
+ /* Set link properties */
+ function linkProperties($FromNode,$ToNode,$Settings)
+ {
+ if ( !isset($this->Data[$FromNode]) ) { return(0); }
+ if ( !isset($this->Data[$ToNode]) ) { return(0); }
+
+ $R = isset($Settings["R"]) ? $Settings["R"] : 0;
+ $G = isset($Settings["G"]) ? $Settings["G"] : 0;
+ $B = isset($Settings["B"]) ? $Settings["B"] : 0;
+ $Alpha = isset($Settings["Alpha"]) ? $Settings["Alpha"] : 100;
+ $Name = isset($Settings["Name"]) ? $Settings["Name"] : NULL;
+ $Ticks = isset($Settings["Ticks"]) ? $Settings["Ticks"] : NULL;
+
+ $this->Links[$FromNode][$ToNode]["R"] = $R; $this->Links[$ToNode][$FromNode]["R"] = $R;
+ $this->Links[$FromNode][$ToNode]["G"] = $G; $this->Links[$ToNode][$FromNode]["G"] = $G;
+ $this->Links[$FromNode][$ToNode]["B"] = $B; $this->Links[$ToNode][$FromNode]["B"] = $B;
+ $this->Links[$FromNode][$ToNode]["Alpha"] = $Alpha; $this->Links[$ToNode][$FromNode]["Alpha"] = $Alpha;
+ $this->Links[$FromNode][$ToNode]["Name"] = $Name; $this->Links[$ToNode][$FromNode]["Name"] = $Name;
+ $this->Links[$FromNode][$ToNode]["Ticks"] = $Ticks; $this->Links[$ToNode][$FromNode]["Ticks"] = $Ticks;
+ }
+
+ function setNodeDefaults($Settings="")
+ {
+ if ( isset($Settings["R"]) ) { $this->Default["R"] = $Settings["R"]; }
+ if ( isset($Settings["G"]) ) { $this->Default["G"] = $Settings["G"]; }
+ if ( isset($Settings["B"]) ) { $this->Default["B"] = $Settings["B"]; }
+ if ( isset($Settings["Alpha"]) ) { $this->Default["Alpha"] = $Settings["Alpha"]; }
+ if ( isset($Settings["BorderR"]) ) { $this->Default["BorderR"] = $Settings["BorderR"]; }
+ if ( isset($Settings["BorderG"]) ) { $this->Default["BorderG"] = $Settings["BorderG"]; }
+ if ( isset($Settings["BorderB"]) ) { $this->Default["BorderB"] = $Settings["BorderB"]; }
+ if ( isset($Settings["BorderAlpha"]) ) { $this->Default["BorderAlpha"] = $Settings["BorderAlpha"]; }
+ if ( isset($Settings["Surrounding"]) ) { $this->Default["Surrounding"] = $Settings["Surrounding"]; }
+ if ( isset($Settings["BackgroundR"]) ) { $this->Default["BackgroundR"] = $Settings["BackgroundR"]; }
+ if ( isset($Settings["BackgroundG"]) ) { $this->Default["BackgroundG"] = $Settings["BackgroundG"]; }
+ if ( isset($Settings["BackgroundB"]) ) { $this->Default["BackgroundB"] = $Settings["BackgroundB"]; }
+ if ( isset($Settings["BackgroundAlpha"]) ) { $this->Default["BackgroundAlpha"] = $Settings["BackgroundAlpha"]; }
+ if ( isset($Settings["NodeType"]) ) { $this->Default["NodeType"] = $Settings["NodeType"]; }
+ if ( isset($Settings["Size"]) ) { $this->Default["Size"] = $Settings["Size"]; }
+ if ( isset($Settings["Shape"]) ) { $this->Default["Shape"] = $Settings["Shape"]; }
+ if ( isset($Settings["FreeZone"]) ) { $this->Default["FreeZone"] = $Settings["FreeZone"]; }
+ }
+
+ /* Add a node */
+ function addNode($NodeID,$Settings="")
+ {
+ /* if the node already exists, ignore */
+ if (isset($this->Data[$NodeID])) { return(0); }
+
+ $Name = isset($Settings["Name"]) ? $Settings["Name"] : "Node ".$NodeID;
+ $Connections = isset($Settings["Connections"]) ? $Settings["Connections"] : NULL;
+
+ $R = isset($Settings["R"]) ? $Settings["R"] : $this->Default["R"];
+ $G = isset($Settings["G"]) ? $Settings["G"] : $this->Default["G"];
+ $B = isset($Settings["B"]) ? $Settings["B"] : $this->Default["B"];
+ $Alpha = isset($Settings["Alpha"]) ? $Settings["Alpha"] : $this->Default["Alpha"];
+ $BorderR = isset($Settings["BorderR"]) ? $Settings["BorderR"] : $this->Default["BorderR"];
+ $BorderG = isset($Settings["BorderG"]) ? $Settings["BorderG"] : $this->Default["BorderG"];
+ $BorderB = isset($Settings["BorderB"]) ? $Settings["BorderB"] : $this->Default["BorderB"];
+ $BorderAlpha = isset($Settings["BorderAlpha"]) ? $Settings["BorderAlpha"] : $this->Default["BorderAlpha"];
+ $Surrounding = isset($Settings["Surrounding"]) ? $Settings["Surrounding"] : $this->Default["Surrounding"];
+ $BackgroundR = isset($Settings["BackgroundR"]) ? $Settings["BackgroundR"] : $this->Default["BackgroundR"];
+ $BackgroundG = isset($Settings["BackgroundG"]) ? $Settings["BackgroundG"] : $this->Default["BackgroundG"];
+ $BackgroundB = isset($Settings["BackgroundB"]) ? $Settings["BackgroundB"] : $this->Default["BackgroundB"];
+ $BackgroundAlpha = isset($Settings["BackgroundAlpha"]) ? $Settings["BackgroundAlpha"] : $this->Default["BackgroundAlpha"];
+ $Force = isset($Settings["Force"]) ? $Settings["Force"] : $this->Default["Force"];
+ $NodeType = isset($Settings["NodeType"]) ? $Settings["NodeType"] : $this->Default["NodeType"];
+ $Size = isset($Settings["Size"]) ? $Settings["Size"] : $this->Default["Size"];
+ $Shape = isset($Settings["Shape"]) ? $Settings["Shape"] : $this->Default["Shape"];
+ $FreeZone = isset($Settings["FreeZone"]) ? $Settings["FreeZone"] : $this->Default["FreeZone"];
+
+ if ( $Surrounding != NULL ) { $BorderR = $R + $Surrounding; $BorderG = $G + $Surrounding; $BorderB = $B + $Surrounding; }
+
+ $this->Data[$NodeID]["R"] = $R; $this->Data[$NodeID]["G"] = $G; $this->Data[$NodeID]["B"] = $B; $this->Data[$NodeID]["Alpha"] = $Alpha;
+ $this->Data[$NodeID]["BorderR"] = $BorderR; $this->Data[$NodeID]["BorderG"] = $BorderG; $this->Data[$NodeID]["BorderB"] = $BorderB; $this->Data[$NodeID]["BorderAlpha"] = $BorderAlpha;
+ $this->Data[$NodeID]["BackgroundR"] = $BackgroundR; $this->Data[$NodeID]["BackgroundG"] = $BackgroundG; $this->Data[$NodeID]["BackgroundB"] = $BackgroundB; $this->Data[$NodeID]["BackgroundAlpha"] = $BackgroundAlpha;
+ $this->Data[$NodeID]["Name"] = $Name;
+ $this->Data[$NodeID]["Force"] = $Force;
+ $this->Data[$NodeID]["Type"] = $NodeType;
+ $this->Data[$NodeID]["Size"] = $Size;
+ $this->Data[$NodeID]["Shape"] = $Shape;
+ $this->Data[$NodeID]["FreeZone"] = $FreeZone;
+ if ( $Connections != NULL )
+ {
+ if ( is_array($Connections ) )
+ {
+ foreach($Connections as $Key => $Value)
+ $this->Data[$NodeID]["Connections"][] = $Value;
+ }
+ else
+ $this->Data[$NodeID]["Connections"][] = $Connections;
+ }
+ }
+
+ /* Set color attribute for a list of nodes */
+ function setNodesColor($Nodes,$Settings="")
+ {
+ if ( is_array($Nodes) )
+ {
+ foreach ($Nodes as $Key => $NodeID)
+ {
+ if (isset($this->Data[$NodeID]) )
+ {
+ if ( isset($Settings["R"]) ) { $this->Data[$NodeID]["R"] = $Settings["R"]; }
+ if ( isset($Settings["G"]) ) { $this->Data[$NodeID]["G"] = $Settings["G"]; }
+ if ( isset($Settings["B"]) ) { $this->Data[$NodeID]["B"] = $Settings["B"]; }
+ if ( isset($Settings["Alpha"]) ) { $this->Data[$NodeID]["Alpha"] = $Settings["Alpha"]; }
+ if ( isset($Settings["BorderR"]) ) { $this->Data[$NodeID]["BorderR"] = $Settings["BorderR"]; }
+ if ( isset($Settings["BorderG"]) ) { $this->Data[$NodeID]["BorderG"] = $Settings["BorderG"]; }
+ if ( isset($Settings["BorderB"]) ) { $this->Data[$NodeID]["BorderB"] = $Settings["BorderB"]; }
+ if ( isset($Settings["BorderAlpha"]) ) { $this->Data[$NodeID]["BorderAlpha"] = $Settings["BorderAlpha"]; }
+ if ( isset($Settings["Surrounding"]) ) { $this->Data[$NodeID]["BorderR"] = $this->Data[$NodeID]["R"] + $Settings["Surrounding"]; $this->Data[$NodeID]["BorderG"] = $this->Data[$NodeID]["G"] + $Settings["Surrounding"]; $this->Data[$NodeID]["BorderB"] = $this->Data[$NodeID]["B"] + $Settings["Surrounding"]; }
+ }
+ }
+ }
+ else
+ {
+ if ( isset($Settings["R"]) ) { $this->Data[$Nodes]["R"] = $Settings["R"]; }
+ if ( isset($Settings["G"]) ) { $this->Data[$Nodes]["G"] = $Settings["G"]; }
+ if ( isset($Settings["B"]) ) { $this->Data[$Nodes]["B"] = $Settings["B"]; }
+ if ( isset($Settings["Alpha"]) ) { $this->Data[$Nodes]["Alpha"] = $Settings["Alpha"]; }
+ if ( isset($Settings["BorderR"]) ) { $this->Data[$Nodes]["BorderR"] = $Settings["BorderR"]; }
+ if ( isset($Settings["BorderG"]) ) { $this->Data[$Nodes]["BorderG"] = $Settings["BorderG"]; }
+ if ( isset($Settings["BorderB"]) ) { $this->Data[$Nodes]["BorderB"] = $Settings["BorderB"]; }
+ if ( isset($Settings["BorderAlpha"]) ) { $this->Data[$Nodes]["BorderAlpha"] = $Settings["BorderAlpha"]; }
+ if ( isset($Settings["Surrounding"]) ) { $this->Data[$Nodes]["BorderR"] = $this->Data[$NodeID]["R"] + $Settings["Surrounding"]; $this->Data[$NodeID]["BorderG"] = $this->Data[$NodeID]["G"] + $Settings["Surrounding"]; $this->Data[$NodeID]["BorderB"] = $this->Data[$NodeID]["B"] + $Settings["Surrounding"]; }
+ }
+ }
+
+ /* Returns all the nodes details */
+ function dumpNodes()
+ { return($this->Data); }
+
+ /* Check if a connection exists and create it if required */
+ function checkConnection($SourceID, $TargetID)
+ {
+ if ( isset($this->Data[$SourceID]["Connections"]) )
+ {
+ foreach ($this->Data[$SourceID]["Connections"] as $Key => $ConnectionID)
+ { if ( $TargetID == $ConnectionID ) { return(TRUE); } }
+ }
+ $this->Data[$SourceID]["Connections"][] = $TargetID;
+ }
+ /* Get the median linked nodes position */
+ function getMedianOffset($Key,$X,$Y)
+ {
+ $Cpt = 1;
+ if ( isset($this->Data[$Key]["Connections"]) )
+ {
+ foreach($this->Data[$Key]["Connections"] as $ID => $NodeID)
+ {
+ if ( isset($this->Data[$NodeID]["X"]) && isset($this->Data[$NodeID]["Y"]) )
+ {
+ $X = $X + $this->Data[$NodeID]["X"];
+ $Y = $Y + $this->Data[$NodeID]["Y"];
+ $Cpt++;
+ }
+ }
+ }
+ return(array("X"=>$X/$Cpt,"Y"=>$Y/$Cpt));
+ }
+
+ /* Return the ID of the attached partner with the biggest weight */
+ function getBiggestPartner($Key)
+ {
+ if ( !isset($this->Data[$Key]["Connections"]) ) { return(""); }
+
+ $MaxWeight = 0; $Result = "";
+ foreach($this->Data[$Key]["Connections"] as $Key => $PeerID)
+ {
+ if ( $this->Data[$PeerID]["Weight"] > $MaxWeight )
+ { $MaxWeight = $this->Data[$PeerID]["Weight"]; $Result = $PeerID; }
+ }
+ return($Result);
+ }
+
+ /* Do the initial node positions computing pass */
+ function firstPass($Algorithm)
+ {
+ $CenterX = ($this->X2 - $this->X1) / 2 + $this->X1;
+ $CenterY = ($this->Y2 - $this->Y1) / 2 + $this->Y1;
+
+ /* Check connections reciprocity */
+ foreach($this->Data as $Key => $Settings)
+ {
+ if ( isset($Settings["Connections"]) )
+ {
+ foreach($Settings["Connections"] as $ID => $ConnectionID)
+ $this->checkConnection($ConnectionID,$Key);
+ }
+ }
+
+ if ( $this->AutoComputeFreeZone ) { $this->autoFreeZone(); }
+
+ /* Get the max number of connections */
+ $MaxConnections = 0;
+ foreach($this->Data as $Key => $Settings)
+ { if ( isset($Settings["Connections"]) ) { if ( $MaxConnections < count($Settings["Connections"] ) ) { $MaxConnections = count($Settings["Connections"]); } } }
+
+ if ( $Algorithm == ALGORITHM_WEIGHTED )
+ {
+ foreach($this->Data as $Key => $Settings)
+ {
+ if ( $Settings["Type"] == NODE_TYPE_CENTRAL ) { $this->Data[$Key]["X"] = $CenterX; $this->Data[$Key]["Y"] = $CenterY; }
+ if ( $Settings["Type"] == NODE_TYPE_FREE )
+ {
+ if ( isset($Settings["Connections"]) )
+ { $Connections = count($Settings["Connections"]); }
+ else
+ { $Connections = 0; }
+
+ $Ring = $MaxConnections - $Connections;
+ $Angle = rand(0,360);
+
+ $this->Data[$Key]["X"] = cos(deg2rad($Angle)) * ($Ring*$this->RingSize) + $CenterX;
+ $this->Data[$Key]["Y"] = sin(deg2rad($Angle)) * ($Ring*$this->RingSize) + $CenterY;
+ }
+ }
+ }
+ elseif ( $Algorithm == ALGORITHM_CENTRAL )
+ {
+ /* Put a weight on each nodes */
+ foreach($this->Data as $Key => $Settings)
+ {
+ if ( isset($Settings["Connections"]) )
+ $this->Data[$Key]["Weight"] = count($Settings["Connections"]);
+ else
+ $this->Data[$Key]["Weight"] = 0;
+ }
+
+ $MaxConnections = $MaxConnections + 1;
+ for($i=$MaxConnections;$i>=0;$i--)
+ {
+ foreach($this->Data as $Key => $Settings)
+ {
+ if ( $Settings["Type"] == NODE_TYPE_CENTRAL ) { $this->Data[$Key]["X"] = $CenterX; $this->Data[$Key]["Y"] = $CenterY; }
+ if ( $Settings["Type"] == NODE_TYPE_FREE )
+ {
+ if ( isset($Settings["Connections"]) )
+ { $Connections = count($Settings["Connections"]); }
+ else
+ { $Connections = 0; }
+
+ if ( $Connections == $i )
+ {
+ $BiggestPartner = $this->getBiggestPartner($Key);
+ if ( $BiggestPartner != "" )
+ {
+ $Ring = $this->Data[$BiggestPartner]["FreeZone"];
+ $Weight = $this->Data[$BiggestPartner]["Weight"];
+ $AngleDivision = 360 / $this->Data[$BiggestPartner]["Weight"];
+ $Done = FALSE; $Tries = 0;
+ while (!$Done && $Tries <= $Weight*2)
+ {
+ $Tries++;
+ $Angle = floor(rand(0,$Weight)*$AngleDivision);
+ if ( !isset($this->Data[$BiggestPartner]["Angular"][$Angle]) || !isset($this->Data[$BiggestPartner]["Angular"]) )
+ {
+ $this->Data[$BiggestPartner]["Angular"][$Angle] = $Angle;
+ $Done = TRUE;
+ }
+ }
+ if ( !$Done )
+ { $Angle = rand(0,360); $this->Data[$BiggestPartner]["Angular"][$Angle] = $Angle; }
+
+ $X = cos(deg2rad($Angle)) * ($Ring) + $this->Data[$BiggestPartner]["X"];
+ $Y = sin(deg2rad($Angle)) * ($Ring) + $this->Data[$BiggestPartner]["Y"];
+
+ $this->Data[$Key]["X"] = $X;
+ $this->Data[$Key]["Y"] = $Y;
+ }
+ }
+ }
+ }
+ }
+ }
+ elseif ( $Algorithm == ALGORITHM_CIRCULAR )
+ {
+ $MaxConnections = $MaxConnections + 1;
+ for($i=$MaxConnections;$i>=0;$i--)
+ {
+ foreach($this->Data as $Key => $Settings)
+ {
+ if ( $Settings["Type"] == NODE_TYPE_CENTRAL ) { $this->Data[$Key]["X"] = $CenterX; $this->Data[$Key]["Y"] = $CenterY; }
+ if ( $Settings["Type"] == NODE_TYPE_FREE )
+ {
+ if ( isset($Settings["Connections"]) )
+ { $Connections = count($Settings["Connections"]); }
+ else
+ { $Connections = 0; }
+
+ if ( $Connections == $i )
+ {
+ $Ring = $MaxConnections - $Connections;
+ $Angle = rand(0,360);
+
+ $X = cos(deg2rad($Angle)) * ($Ring*$this->RingSize) + $CenterX;
+ $Y = sin(deg2rad($Angle)) * ($Ring*$this->RingSize) + $CenterY;
+
+ $MedianOffset = $this->getMedianOffset($Key,$X,$Y);
+
+ $this->Data[$Key]["X"] = $MedianOffset["X"];
+ $this->Data[$Key]["Y"] = $MedianOffset["Y"];
+ }
+ }
+ }
+ }
+ }
+ elseif ( $Algorithm == ALGORITHM_RANDOM )
+ {
+ foreach($this->Data as $Key => $Settings)
+ {
+ if ( $Settings["Type"] == NODE_TYPE_FREE )
+ {
+ $this->Data[$Key]["X"] = $CenterX + rand(-20,20);
+ $this->Data[$Key]["Y"] = $CenterY + rand(-20,20);
+ }
+ if ( $Settings["Type"] == NODE_TYPE_CENTRAL ) { $this->Data[$Key]["X"] = $CenterX; $this->Data[$Key]["Y"] = $CenterY; }
+ }
+ }
+ }
+
+ /* Compute one pass */
+ function doPass()
+ {
+ /* Compute vectors */
+ foreach($this->Data as $Key => $Settings)
+ {
+ if ( $Settings["Type"] != NODE_TYPE_CENTRAL )
+ {
+ unset($this->Data[$Key]["Vectors"]);
+
+ $X1 = $Settings["X"];
+ $Y1 = $Settings["Y"];
+
+ /* Repulsion vectors */
+ foreach($this->Data as $Key2 => $Settings2)
+ {
+ if ( $Key != $Key2 )
+ {
+ $X2 = $this->Data[$Key2]["X"];
+ $Y2 = $this->Data[$Key2]["Y"];
+ $FreeZone = $this->Data[$Key2]["FreeZone"];
+
+ $Distance = $this->getDistance($X1,$Y1,$X2,$Y2);
+ $Angle = $this->getAngle($X1,$Y1,$X2,$Y2) + 180;
+
+ /* Nodes too close, repulsion occurs */
+ if ( $Distance < $FreeZone )
+ {
+ $Force = log(pow(2,$FreeZone-$Distance));
+ if ( $Force > 1 )
+ { $this->Data[$Key]["Vectors"][] = array("Type"=>"R","Angle"=>$Angle % 360,"Force"=>$Force); }
+ }
+ }
+ }
+
+ /* Attraction vectors */
+ if ( isset($Settings["Connections"]) )
+ {
+ foreach($Settings["Connections"] as $ID => $NodeID)
+ {
+ if ( isset($this->Data[$NodeID]) )
+ {
+ $X2 = $this->Data[$NodeID]["X"];
+ $Y2 = $this->Data[$NodeID]["Y"];
+ $FreeZone = $this->Data[$Key2]["FreeZone"];
+
+ $Distance = $this->getDistance($X1,$Y1,$X2,$Y2);
+ $Angle = $this->getAngle($X1,$Y1,$X2,$Y2);
+
+ if ( $Distance > $FreeZone )
+ $Force = log(($Distance-$FreeZone)+1);
+ else
+ { $Force = log(($FreeZone-$Distance)+1); ($Angle = $Angle + 180); }
+
+ if ( $Force > 1 )
+ $this->Data[$Key]["Vectors"][] = array("Type"=>"A","Angle"=>$Angle % 360,"Force"=>$Force);
+ }
+ }
+ }
+ }
+ }
+
+ /* Move the nodes accoding to the vectors */
+ foreach($this->Data as $Key => $Settings)
+ {
+ $X = $Settings["X"];
+ $Y = $Settings["Y"];
+
+ if ( isset($Settings["Vectors"]) && $Settings["Type"] != NODE_TYPE_CENTRAL )
+ {
+ foreach($Settings["Vectors"] as $ID => $Vector)
+ {
+ $Type = $Vector["Type"];
+ $Force = $Vector["Force"];
+ $Angle = $Vector["Angle"];
+ $Factor = $Type == "A" ? $this->MagneticForceA : $this->MagneticForceR;
+
+ $X = cos(deg2rad($Angle)) * $Force * $Factor + $X;
+ $Y = sin(deg2rad($Angle)) * $Force * $Factor + $Y;
+ }
+ }
+
+ $this->Data[$Key]["X"] = $X;
+ $this->Data[$Key]["Y"] = $Y;
+ }
+ }
+
+ function lastPass()
+ {
+ /* Put everything inside the graph area */
+ foreach($this->Data as $Key => $Settings)
+ {
+ $X = $Settings["X"];
+ $Y = $Settings["Y"];
+
+ if ( $X < $this->X1 ) { $X = $this->X1; }
+ if ( $X > $this->X2 ) { $X = $this->X2; }
+ if ( $Y < $this->Y1 ) { $Y = $this->Y1; }
+ if ( $Y > $this->Y2 ) { $Y = $this->Y2; }
+
+ $this->Data[$Key]["X"] = $X;
+ $this->Data[$Key]["Y"] = $Y;
+ }
+
+ /* Dump all links */
+ $Links = "";
+ foreach($this->Data as $Key => $Settings)
+ {
+ $X1 = $Settings["X"];
+ $Y1 = $Settings["Y"];
+
+ if ( isset($Settings["Connections"]) )
+ {
+ foreach ($Settings["Connections"] as $ID => $NodeID)
+ {
+ if ( isset($this->Data[$NodeID]) )
+ {
+ $X2 = $this->Data[$NodeID]["X"];
+ $Y2 = $this->Data[$NodeID]["Y"];
+
+ $Links[] = array("X1"=>$X1,"Y1"=>$Y1,"X2"=>$X2,"Y2"=>$Y2,"Source"=>$Settings["Name"],"Destination"=>$this->Data[$NodeID]["Name"]);
+ }
+ }
+ }
+ }
+
+ /* Check collisions */
+ $Conflicts = 0;
+ foreach($this->Data as $Key => $Settings)
+ {
+ $X1 = $Settings["X"];
+ $Y1 = $Settings["Y"];
+
+ if ( isset($Settings["Connections"]) )
+ {
+ foreach ($Settings["Connections"] as $ID => $NodeID)
+ {
+ if ( isset($this->Data[$NodeID]) )
+ {
+ $X2 = $this->Data[$NodeID]["X"];
+ $Y2 = $this->Data[$NodeID]["Y"];
+
+ foreach($Links as $IDLinks => $Link)
+ {
+ $X3 = $Link["X1"]; $Y3 = $Link["Y1"]; $X4 = $Link["X2"]; $Y4 = $Link["Y2"];
+
+ if ( !($X1 == $X3 && $X2 == $X4 && $Y1 == $Y3 && $Y2 == $Y4 ) )
+ {
+ if ( $this->intersect($X1,$Y1,$X2,$Y2,$X3,$Y3,$X4,$Y4) )
+ {
+ if ( $Link["Source"] != $Settings["Name"] && $Link["Source"] != $this->Data[$NodeID]["Name"] && $Link["Destination"] != $Settings["Name"] && $Link["Destination"] != $this->Data[$NodeID]["Name"] )
+ { $Conflicts++; }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ return($Conflicts/2);
+ }
+
+ /* Center the graph */
+ function center()
+ {
+ /* Determine the real center */
+ $TargetCenterX = ($this->X2 - $this->X1) / 2 + $this->X1;
+ $TargetCenterY = ($this->Y2 - $this->Y1) / 2 + $this->Y1;
+
+ /* Get current boundaries */
+ $XMin = $this->X2; $XMax = $this->X1;
+ $YMin = $this->Y2; $YMax = $this->Y1;
+ foreach($this->Data as $Key => $Settings)
+ {
+ $X = $Settings["X"];
+ $Y = $Settings["Y"];
+
+ if ( $X < $XMin) { $XMin = $X; }
+ if ( $X > $XMax) { $XMax = $X; }
+ if ( $Y < $YMin) { $YMin = $Y; }
+ if ( $Y > $YMax) { $YMax = $Y; }
+ }
+ $CurrentCenterX = ($XMax - $XMin) / 2 + $XMin;
+ $CurrentCenterY = ($YMax - $YMin) / 2 + $YMin;
+
+ /* Compute the offset to apply */
+ $XOffset = $TargetCenterX - $CurrentCenterX;
+ $YOffset = $TargetCenterY - $CurrentCenterY;
+
+ /* Correct the points position */
+ foreach($this->Data as $Key => $Settings)
+ {
+ $this->Data[$Key]["X"] = $Settings["X"] + $XOffset;
+ $this->Data[$Key]["Y"] = $Settings["Y"] + $YOffset;
+ }
+ }
+
+ /* Create the encoded string */
+ function drawSpring($Object,$Settings="")
+ {
+ $this->pChartObject = $Object;
+
+ $Pass = isset($Settings["Pass"]) ? $Settings["Pass"] : 50;
+ $Retries = isset($Settings["Retry"]) ? $Settings["Retry"] : 10;
+ $this->MagneticForceA = isset($Settings["MagneticForceA"]) ? $Settings["MagneticForceA"] : 1.5;
+ $this->MagneticForceR = isset($Settings["MagneticForceR"]) ? $Settings["MagneticForceR"] : 2;
+ $this->RingSize = isset($Settings["RingSize"]) ? $Settings["RingSize"] : 40;
+ $DrawVectors = isset($Settings["DrawVectors"]) ? $Settings["DrawVectors"] : FALSE;
+ $DrawQuietZone = isset($Settings["DrawQuietZone"]) ? $Settings["DrawQuietZone"] : FALSE;
+ $CenterGraph = isset($Settings["CenterGraph"]) ? $Settings["CenterGraph"] : TRUE;
+ $TextPadding = isset($Settings["TextPadding"]) ? $Settings["TextPadding"] : 4;
+ $Algorithm = isset($Settings["Algorithm"]) ? $Settings["Algorithm"] : ALGORITHM_WEIGHTED;
+
+ $FontSize = $Object->FontSize;
+ $this->X1 = $Object->GraphAreaX1;
+ $this->Y1 = $Object->GraphAreaY1;
+ $this->X2 = $Object->GraphAreaX2;
+ $this->Y2 = $Object->GraphAreaY2;
+
+ $Conflicts = 1; $Jobs = 0; $this->History["MinimumConflicts"] = -1;
+ while ($Conflicts != 0 && $Jobs < $Retries )
+ {
+ $Jobs++;
+
+ /* Compute the initial settings */
+ $this->firstPass($Algorithm);
+
+ /* Apply the vectors */
+ if ( $Pass > 0 )
+ {
+ for ($i=0; $i<=$Pass; $i++) { $this->doPass(); }
+ }
+
+ $Conflicts = $this->lastPass();
+ if ( $this->History["MinimumConflicts"] == -1 || $Conflicts < $this->History["MinimumConflicts"] )
+ { $this->History["MinimumConflicts"] = $Conflicts; $this->History["Result"] = $this->Data; }
+ }
+
+ $Conflicts = $this->History["MinimumConflicts"];
+ $this->Data = $this->History["Result"];
+
+ if ( $CenterGraph ) { $this->center(); }
+
+ /* Draw the connections */
+ $Drawn = "";
+ foreach($this->Data as $Key => $Settings)
+ {
+ $X = $Settings["X"];
+ $Y = $Settings["Y"];
+
+ if ( isset($Settings["Connections"]) )
+ {
+ foreach ($Settings["Connections"] as $ID => $NodeID)
+ {
+ if ( !isset($Drawn[$Key]) ) { $Drawn[$Key] = ""; }
+ if ( !isset($Drawn[$NodeID]) ) { $Drawn[$NodeID] = ""; }
+
+ if ( isset($this->Data[$NodeID]) && !isset($Drawn[$Key][$NodeID]) && !isset($Drawn[$NodeID][$Key]) )
+ {
+ $Color = array("R"=>$this->Default["LinkR"],"G"=>$this->Default["LinkG"],"B"=>$this->Default["LinkB"],"Alpha"=>$this->Default["Alpha"]);
+
+ if ( $this->Links != "" )
+ {
+ if ( isset($this->Links[$Key][$NodeID]["R"]) )
+ { $Color = array("R"=>$this->Links[$Key][$NodeID]["R"],"G"=>$this->Links[$Key][$NodeID]["G"],"B"=>$this->Links[$Key][$NodeID]["B"],"Alpha"=>$this->Links[$Key][$NodeID]["Alpha"]); }
+
+ if ( isset($this->Links[$Key][$NodeID]["Ticks"]) )
+ { $Color["Ticks"] = $this->Links[$Key][$NodeID]["Ticks"]; }
+ }
+
+ $X2 = $this->Data[$NodeID]["X"];
+ $Y2 = $this->Data[$NodeID]["Y"];
+ $this->pChartObject->drawLine($X,$Y,$X2,$Y2,$Color);
+ $Drawn[$Key][$NodeID] = TRUE;
+
+ if ( isset($this->Links) && $this->Links != "" )
+ {
+ if ( isset($this->Links[$Key][$NodeID]["Name"]) || isset($this->Links[$NodeID][$Key]["Name"]) )
+ {
+ $Name = isset($this->Links[$Key][$NodeID]["Name"]) ? $this->Links[$Key][$NodeID]["Name"] : $this->Links[$NodeID][$Key]["Name"];
+ $TxtX = ($X2 - $X)/2 + $X;
+ $TxtY = ($Y2 - $Y)/2 + $Y;
+
+ if ( $X <= $X2 )
+ $Angle = (360-$this->getAngle($X,$Y,$X2,$Y2)) % 360;
+ else
+ $Angle = (360-$this->getAngle($X2,$Y2,$X,$Y)) % 360;
+
+ $Settings = $Color;
+ $Settings["Angle"] = $Angle;
+ $Settings["Align"] = TEXT_ALIGN_BOTTOMMIDDLE;
+ $this->pChartObject->drawText($TxtX,$TxtY,$Name,$Settings);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ /* Draw the quiet zones */
+ if ( $DrawQuietZone )
+ {
+ foreach($this->Data as $Key => $Settings)
+ {
+ $X = $Settings["X"];
+ $Y = $Settings["Y"];
+ $FreeZone = $Settings["FreeZone"];
+
+ $this->pChartObject->drawFilledCircle($X,$Y,$FreeZone,array("R"=>0,"G"=>0,"B"=>0,"Alpha"=>2));
+ }
+ }
+
+
+ /* Draw the nodes */
+ foreach($this->Data as $Key => $Settings)
+ {
+ $X = $Settings["X"];
+ $Y = $Settings["Y"];
+ $Name = $Settings["Name"];
+ $FreeZone = $Settings["FreeZone"];
+ $Shape = $Settings["Shape"];
+ $Size = $Settings["Size"];
+
+ $Color = array("R"=>$Settings["R"],"G"=>$Settings["G"],"B"=>$Settings["B"],"Alpha"=>$Settings["Alpha"],"BorderR"=>$Settings["BorderR"],"BorderG"=>$Settings["BorderG"],"BorderB"=>$Settings["BorderB"],"BorderApha"=>$Settings["BorderAlpha"]);
+
+ if ( $Shape == NODE_SHAPE_CIRCLE )
+ {
+ $this->pChartObject->drawFilledCircle($X,$Y,$Size,$Color);
+ }
+ elseif ( $Shape == NODE_SHAPE_TRIANGLE )
+ {
+ $Points = "";
+ $Points[] = cos(deg2rad(270)) * $Size + $X; $Points[] = sin(deg2rad(270)) * $Size + $Y;
+ $Points[] = cos(deg2rad(45)) * $Size + $X; $Points[] = sin(deg2rad(45)) * $Size + $Y;
+ $Points[] = cos(deg2rad(135)) * $Size + $X; $Points[] = sin(deg2rad(135)) * $Size + $Y;
+ $this->pChartObject->drawPolygon($Points,$Color);
+ }
+ elseif ( $Shape == NODE_SHAPE_SQUARE )
+ {
+ $Offset = $Size/2; $Size = $Size / 2;
+ $this->pChartObject->drawFilledRectangle($X-$Offset,$Y-$Offset,$X+$Offset,$Y+$Offset,$Color);
+ }
+
+ if ( $Name != "" )
+ {
+ $LabelOptions = array("R"=>$this->Labels["R"],"G"=>$this->Labels["G"],"B"=>$this->Labels["B"],"Alpha"=>$this->Labels["Alpha"]);
+
+ if ( $this->Labels["Type"] == LABEL_LIGHT )
+ {
+ $LabelOptions["Align"] = TEXT_ALIGN_BOTTOMLEFT;
+ $this->pChartObject->drawText($X,$Y,$Name,$LabelOptions);
+ }
+ elseif ( $this->Labels["Type"] == LABEL_CLASSIC )
+ {
+ $LabelOptions["Align"] = TEXT_ALIGN_TOPMIDDLE;
+ $LabelOptions["DrawBox"] = TRUE;
+ $LabelOptions["BoxAlpha"] = 50;
+ $LabelOptions["BorderOffset"] = 4;
+ $LabelOptions["RoundedRadius"] = 3;
+ $LabelOptions["BoxRounded"] = TRUE;
+ $LabelOptions["NoShadow"] = TRUE;
+
+ $this->pChartObject->drawText($X,$Y+$Size+$TextPadding,$Name,$LabelOptions);
+ }
+ }
+ }
+
+ /* Draw the vectors */
+ if ( $DrawVectors )
+ {
+ foreach($this->Data as $Key => $Settings)
+ {
+ $X1 = $Settings["X"];
+ $Y1 = $Settings["Y"];
+
+ if ( isset($Settings["Vectors"]) && $Settings["Type"] != NODE_TYPE_CENTRAL )
+ {
+ foreach($Settings["Vectors"] as $ID => $Vector)
+ {
+ $Type = $Vector["Type"];
+ $Force = $Vector["Force"];
+ $Angle = $Vector["Angle"];
+ $Factor = $Type == "A" ? $this->MagneticForceA : $this->MagneticForceR;
+ $Color = $Type == "A" ? array("FillR"=>255,"FillG"=>0,"FillB"=>0) : array("FillR"=>0,"FillG"=>255,"FillB"=>0);
+
+ $X2 = cos(deg2rad($Angle)) * $Force * $Factor + $X1;
+ $Y2 = sin(deg2rad($Angle)) * $Force * $Factor + $Y1;
+
+ $this->pChartObject->drawArrow($X1,$Y1,$X2,$Y2,$Color);
+ }
+ }
+ }
+ }
+
+ return(array("Pass"=>$Jobs,"Conflicts"=>$Conflicts));
+ }
+
+ /* Return the distance between two points */
+ function getDistance($X1,$Y1,$X2,$Y2)
+ { return (sqrt(($X2-$X1)*($X2-$X1)+($Y2-$Y1)*($Y2-$Y1))); }
+
+ /* Return the angle made by a line and the X axis */
+ function getAngle($X1,$Y1,$X2,$Y2)
+ {
+ $Opposite = $Y2 - $Y1; $Adjacent = $X2 - $X1;$Angle = rad2deg(atan2($Opposite,$Adjacent));
+ if ($Angle > 0) { return($Angle); } else { return(360-abs($Angle)); }
+ }
+
+ function intersect($X1,$Y1,$X2,$Y2,$X3,$Y3,$X4,$Y4)
+ {
+ $A = (($X3 * $Y4 - $X4 * $Y3) * ($X1 - $X2) - ($X1 * $Y2 - $X2 * $Y1) * ($X3 - $X4));
+ $B = (($Y1 - $Y2) * ($X3 - $X4) - ($Y3 - $Y4) * ($X1 - $X2));
+
+ if ( $B == 0 ) { return(FALSE); }
+ $Xi = $A / $B;
+
+ $C = ($X1 - $X2);
+ if ( $C == 0 ) { return(FALSE); }
+ $Yi = $Xi * (($Y1 - $Y2)/$C) + (($X1 * $Y2 - $X2 * $Y1)/$C);
+
+ if ( $Xi >= min($X1,$X2) && $Xi >= min($X3,$X4) && $Xi <= max($X1,$X2) && $Xi <= max($X3,$X4))
+ {
+ if ( $Yi >= min($Y1,$Y2) && $Yi >= min($Y3,$Y4) && $Yi <= max($Y1,$Y2) && $Yi <= max($Y3,$Y4))
+ { return(TRUE); }
+ }
+
+ return(FALSE);
+ }
+ }
+?> \ No newline at end of file
diff --git a/For Weekly Test/tricode/class/pStock.class.php b/For Weekly Test/tricode/class/pStock.class.php
new file mode 100644
index 0000000..7f9dbfb
--- /dev/null
+++ b/For Weekly Test/tricode/class/pStock.class.php
@@ -0,0 +1,216 @@
+<?php
+ /*
+ pStock - class to draw stock charts
+
+ Version : 2.1.2
+ Made by : Jean-Damien POGOLOTTI
+ Last Update : 03/08/11
+
+ This file can be distributed under the license you can find at :
+
+ http://www.pchart.net/license
+
+ You can find the whole class documentation on the pChart web site.
+ */
+
+ define("STOCK_MISSING_SERIE" , 180001);
+
+ /* pStock class definition */
+ class pStock
+ {
+ var $pChartObject;
+ var $pDataObject;
+
+ /* Class creator */
+ function pStock($pChartObject,$pDataObject)
+ {
+ $this->pChartObject = $pChartObject;
+ $this->pDataObject = $pDataObject;
+ }
+
+ /* Draw a stock chart */
+ function drawStockChart($Format="")
+ {
+ $SerieOpen = isset($Format["SerieOpen"]) ? $Format["SerieOpen"] : "Open";
+ $SerieClose = isset($Format["SerieClose"]) ? $Format["SerieClose"] : "Close";
+ $SerieMin = isset($Format["SerieMin"]) ? $Format["SerieMin"] : "Min";
+ $SerieMax = isset($Format["SerieMax"]) ? $Format["SerieMax"] : "Max";
+ $SerieMedian = isset($Format["SerieMedian"]) ? $Format["SerieMedian"] : NULL;
+ $LineWidth = isset($Format["LineWidth"]) ? $Format["LineWidth"] : 1;
+ $LineR = isset($Format["LineR"]) ? $Format["LineR"] : 0;
+ $LineG = isset($Format["LineG"]) ? $Format["LineG"] : 0;
+ $LineB = isset($Format["LineB"]) ? $Format["LineB"] : 0;
+ $LineAlpha = isset($Format["LineAlpha"]) ? $Format["LineAlpha"] : 100;
+ $ExtremityWidth = isset($Format["ExtremityWidth"]) ? $Format["ExtremityWidth"] : 1;
+ $ExtremityLength = isset($Format["ExtremityLength"]) ? $Format["ExtremityLength"] : 3;
+ $ExtremityR = isset($Format["ExtremityR"]) ? $Format["ExtremityR"] : 0;
+ $ExtremityG = isset($Format["ExtremityG"]) ? $Format["ExtremityG"] : 0;
+ $ExtremityB = isset($Format["ExtremityB"]) ? $Format["ExtremityB"] : 0;
+ $ExtremityAlpha = isset($Format["ExtremityAlpha"]) ? $Format["ExtremityAlpha"] : 100;
+ $BoxWidth = isset($Format["BoxWidth"]) ? $Format["BoxWidth"] : 8;
+ $BoxUpR = isset($Format["BoxUpR"]) ? $Format["BoxUpR"] : 188;
+ $BoxUpG = isset($Format["BoxUpG"]) ? $Format["BoxUpG"] : 224;
+ $BoxUpB = isset($Format["BoxUpB"]) ? $Format["BoxUpB"] : 46;
+ $BoxUpAlpha = isset($Format["BoxUpAlpha"]) ? $Format["BoxUpAlpha"] : 100;
+ $BoxUpSurrounding = isset($Format["BoxUpSurrounding"]) ? $Format["BoxUpSurrounding"] : NULL;
+ $BoxUpBorderR = isset($Format["BoxUpBorderR"]) ? $Format["BoxUpBorderR"] : $BoxUpR-20;
+ $BoxUpBorderG = isset($Format["BoxUpBorderG"]) ? $Format["BoxUpBorderG"] : $BoxUpG-20;
+ $BoxUpBorderB = isset($Format["BoxUpBorderB"]) ? $Format["BoxUpBorderB"] : $BoxUpB-20;
+ $BoxUpBorderAlpha = isset($Format["BoxUpBorderAlpha"]) ? $Format["BoxUpBorderAlpha"] : 100;
+ $BoxDownR = isset($Format["BoxDownR"]) ? $Format["BoxDownR"] : 224;
+ $BoxDownG = isset($Format["BoxDownG"]) ? $Format["BoxDownG"] : 100;
+ $BoxDownB = isset($Format["BoxDownB"]) ? $Format["BoxDownB"] : 46;
+ $BoxDownAlpha = isset($Format["BoxDownAlpha"]) ? $Format["BoxDownAlpha"] : 100;
+ $BoxDownSurrounding= isset($Format["BoxDownSurrounding"]) ? $Format["BoxDownSurrounding"] : NULL;
+ $BoxDownBorderR = isset($Format["BoxDownBorderR"]) ? $Format["BoxDownBorderR"] : $BoxDownR-20;
+ $BoxDownBorderG = isset($Format["BoxDownBorderG"]) ? $Format["BoxDownBorderG"] : $BoxDownG-20;
+ $BoxDownBorderB = isset($Format["BoxDownBorderB"]) ? $Format["BoxDownBorderB"] : $BoxDownB-20;
+ $BoxDownBorderAlpha= isset($Format["BoxDownBorderAlpha"]) ? $Format["BoxDownBorderAlpha"] : 100;
+ $ShadowOnBoxesOnly = isset($Format["ShadowOnBoxesOnly"]) ? $Format["ShadowOnBoxesOnly"] : TRUE;
+ $MedianR = isset($Format["MedianR"]) ? $Format["MedianR"] : 255;
+ $MedianG = isset($Format["MedianG"]) ? $Format["MedianG"] : 0;
+ $MedianB = isset($Format["MedianB"]) ? $Format["MedianB"] : 0;
+ $MedianAlpha = isset($Format["MedianAlpha"]) ? $Format["MedianAlpha"] : 100;
+ $RecordImageMap = isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE;
+ $ImageMapTitle = isset($Format["ImageMapTitle"]) ? $Format["ImageMapTitle"] : "Stock Chart";
+
+
+ /* Data Processing */
+ $Data = $this->pDataObject->getData();
+ $Palette = $this->pDataObject->getPalette();
+
+ if ( $BoxUpSurrounding != NULL ) { $BoxUpBorderR = $BoxUpR + $BoxUpSurrounding; $BoxUpBorderG = $BoxUpG + $BoxUpSurrounding; $BoxUpBorderB = $BoxUpB + $BoxUpSurrounding; }
+ if ( $BoxDownSurrounding != NULL ) { $BoxDownBorderR = $BoxDownR + $BoxDownSurrounding; $BoxDownBorderG = $BoxDownG + $BoxDownSurrounding; $BoxDownBorderB = $BoxDownB + $BoxDownSurrounding; }
+
+ if ( $LineWidth != 1 ) { $LineOffset = $LineWidth / 2; }
+ $BoxOffset = $BoxWidth / 2;
+
+ $Data = $this->pChartObject->DataSet->getData();
+ list($XMargin,$XDivs) = $this->pChartObject->scaleGetXSettings();
+
+ if ( !isset($Data["Series"][$SerieOpen]) || !isset($Data["Series"][$SerieClose]) || !isset($Data["Series"][$SerieMin]) || !isset($Data["Series"][$SerieMax]) )
+ return(STOCK_MISSING_SERIE);
+
+ $Plots = "";
+ foreach($Data["Series"][$SerieOpen]["Data"] as $Key => $Value)
+ {
+ $Point = "";
+ if ( isset($Data["Series"][$SerieClose]["Data"][$Key]) || isset($Data["Series"][$SerieMin]["Data"][$Key]) || isset($Data["Series"][$SerieMax]["Data"][$Key]) )
+ $Point = array($Value,$Data["Series"][$SerieClose]["Data"][$Key],$Data["Series"][$SerieMin]["Data"][$Key],$Data["Series"][$SerieMax]["Data"][$Key]);
+ if ( $SerieMedian != NULL && isset($Data["Series"][$SerieMedian]["Data"][$Key]) )
+ $Point[] = $Data["Series"][$SerieMedian]["Data"][$Key];
+
+ $Plots[] = $Point;
+ }
+
+ $AxisID = $Data["Series"][$SerieOpen]["Axis"];
+ $Mode = $Data["Axis"][$AxisID]["Display"];
+ $Format = $Data["Axis"][$AxisID]["Format"];
+ $Unit = $Data["Axis"][$AxisID]["Unit"];
+
+ $YZero = $this->pChartObject->scaleComputeY(0,array("AxisID"=>$AxisID));
+ $XStep = ($this->pChartObject->GraphAreaX2-$this->pChartObject->GraphAreaX1-$XMargin*2)/$XDivs;
+
+ $X = $this->pChartObject->GraphAreaX1 + $XMargin;
+ $Y = $this->pChartObject->GraphAreaY1 + $XMargin;
+
+ $LineSettings = array("R"=>$LineR,"G"=>$LineG,"B"=>$LineB,"Alpha"=>$LineAlpha);
+ $ExtremitySettings = array("R"=>$ExtremityR,"G"=>$ExtremityG,"B"=>$ExtremityB,"Alpha"=>$ExtremityAlpha);
+ $BoxUpSettings = array("R"=>$BoxUpR,"G"=>$BoxUpG,"B"=>$BoxUpB,"Alpha"=>$BoxUpAlpha,"BorderR"=>$BoxUpBorderR,"BorderG"=>$BoxUpBorderG,"BorderB"=>$BoxUpBorderB,"BorderAlpha"=>$BoxUpBorderAlpha);
+ $BoxDownSettings = array("R"=>$BoxDownR,"G"=>$BoxDownG,"B"=>$BoxDownB,"Alpha"=>$BoxDownAlpha,"BorderR"=>$BoxDownBorderR,"BorderG"=>$BoxDownBorderG,"BorderB"=>$BoxDownBorderB,"BorderAlpha"=>$BoxDownBorderAlpha);
+ $MedianSettings = array("R"=>$MedianR,"G"=>$MedianG,"B"=>$MedianB,"Alpha"=>$MedianAlpha);
+
+ foreach($Plots as $Key =>$Points)
+ {
+ $PosArray = $this->pChartObject->scaleComputeY($Points,array("AxisID"=>$AxisID));
+
+ $Values = "Open :".$Data["Series"][$SerieOpen]["Data"][$Key]."<BR>Close : ".$Data["Series"][$SerieClose]["Data"][$Key]."<BR>Min : ".$Data["Series"][$SerieMin]["Data"][$Key]."<BR>Max : ".$Data["Series"][$SerieMax]["Data"][$Key]."<BR>";
+ if ( $SerieMedian != NULL ) { $Values = $Values."Median : ".$Data["Series"][$SerieMedian]["Data"][$Key]."<BR>"; }
+ if ( $PosArray[0] > $PosArray[1] ) { $ImageMapColor = $this->pChartObject->toHTMLColor($BoxUpR,$BoxUpG,$BoxUpB); } else { $ImageMapColor = $this->pChartObject->toHTMLColor($BoxDownR,$BoxDownG,$BoxDownB); }
+
+ if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
+ {
+ if ( $YZero > $this->pChartObject->GraphAreaY2-1 ) { $YZero = $this->pChartObject->GraphAreaY2-1; }
+ if ( $YZero < $this->pChartObject->GraphAreaY1+1 ) { $YZero = $this->pChartObject->GraphAreaY1+1; }
+
+ if ( $XDivs == 0 ) { $XStep = 0; } else { $XStep = ($this->pChartObject->GraphAreaX2-$this->pChartObject->GraphAreaX1-$XMargin*2)/$XDivs; }
+
+ if ( $ShadowOnBoxesOnly ) { $RestoreShadow = $this->pChartObject->Shadow; $this->pChartObject->Shadow = FALSE; }
+
+ if ( $LineWidth == 1 )
+ $this->pChartObject->drawLine($X,$PosArray[2],$X,$PosArray[3],$LineSettings);
+ else
+ $this->pChartObject->drawFilledRectangle($X-$LineOffset,$PosArray[2],$X+$LineOffset,$PosArray[3],$LineSettings);
+
+ if ( $ExtremityWidth == 1 )
+ {
+ $this->pChartObject->drawLine($X-$ExtremityLength,$PosArray[2],$X+$ExtremityLength,$PosArray[2],$ExtremitySettings);
+ $this->pChartObject->drawLine($X-$ExtremityLength,$PosArray[3],$X+$ExtremityLength,$PosArray[3],$ExtremitySettings);
+
+ if ( $RecordImageMap ) { $this->pChartObject->addToImageMap("RECT",floor($X-$ExtremityLength).",".floor($PosArray[2]).",".floor($X+$ExtremityLength).",".floor($PosArray[3]),$ImageMapColor,$ImageMapTitle,$Values); }
+ }
+ else
+ {
+ $this->pChartObject->drawFilledRectangle($X-$ExtremityLength,$PosArray[2],$X+$ExtremityLength,$PosArray[2]-$ExtremityWidth,$ExtremitySettings);
+ $this->pChartObject->drawFilledRectangle($X-$ExtremityLength,$PosArray[3],$X+$ExtremityLength,$PosArray[3]+$ExtremityWidth,$ExtremitySettings);
+
+ if ( $RecordImageMap ) { $this->pChartObject->addToImageMap("RECT",floor($X-$ExtremityLength).",".floor($PosArray[2]-$ExtremityWidth).",".floor($X+$ExtremityLength).",".floor($PosArray[3]+$ExtremityWidth),$ImageMapColor,$ImageMapTitle,$Values); }
+ }
+
+ if ( $ShadowOnBoxesOnly ) { $this->pChartObject->Shadow = $RestoreShadow; }
+
+ if ( $PosArray[0] > $PosArray[1] )
+ $this->pChartObject->drawFilledRectangle($X-$BoxOffset,$PosArray[0],$X+$BoxOffset,$PosArray[1],$BoxUpSettings);
+ else
+ $this->pChartObject->drawFilledRectangle($X-$BoxOffset,$PosArray[0],$X+$BoxOffset,$PosArray[1],$BoxDownSettings);
+
+ if ( isset($PosArray[4]) )
+ $this->pChartObject->drawLine($X-$ExtremityLength,$PosArray[4],$X+$ExtremityLength,$PosArray[4],$MedianSettings);
+
+ $X = $X + $XStep;
+ }
+ elseif ( $Data["Orientation"] == SCALE_POS_TOPBOTTOM )
+ {
+ if ( $YZero > $this->pChartObject->GraphAreaX2-1 ) { $YZero = $this->pChartObject->GraphAreaX2-1; }
+ if ( $YZero < $this->pChartObject->GraphAreaX1+1 ) { $YZero = $this->pChartObject->GraphAreaX1+1; }
+
+ if ( $XDivs == 0 ) { $XStep = 0; } else { $XStep = ($this->pChartObject->GraphAreaY2-$this->pChartObject->GraphAreaY1-$XMargin*2)/$XDivs; }
+
+ if ( $LineWidth == 1 )
+ $this->pChartObject->drawLine($PosArray[2],$Y,$PosArray[3],$Y,$LineSettings);
+ else
+ $this->pChartObject->drawFilledRectangle($PosArray[2],$Y-$LineOffset,$PosArray[3],$Y+$LineOffset,$LineSettings);
+
+ if ( $ShadowOnBoxesOnly ) { $RestoreShadow = $this->pChartObject->Shadow; $this->pChartObject->Shadow = FALSE; }
+
+ if ( $ExtremityWidth == 1 )
+ {
+ $this->pChartObject->drawLine($PosArray[2],$Y-$ExtremityLength,$PosArray[2],$Y+$ExtremityLength,$ExtremitySettings);
+ $this->pChartObject->drawLine($PosArray[3],$Y-$ExtremityLength,$PosArray[3],$Y+$ExtremityLength,$ExtremitySettings);
+
+ if ( $RecordImageMap ) { $this->pChartObject->addToImageMap("RECT",floor($PosArray[2]).",".floor($Y-$ExtremityLength).",".floor($PosArray[3]).",".floor($Y+$ExtremityLength),$ImageMapColor,$ImageMapTitle,$Values); }
+ }
+ else
+ {
+ $this->pChartObject->drawFilledRectangle($PosArray[2],$Y-$ExtremityLength,$PosArray[2]-$ExtremityWidth,$Y+$ExtremityLength,$ExtremitySettings);
+ $this->pChartObject->drawFilledRectangle($PosArray[3],$Y-$ExtremityLength,$PosArray[3]+$ExtremityWidth,$Y+$ExtremityLength,$ExtremitySettings);
+
+ if ( $RecordImageMap ) { $this->pChartObject->addToImageMap("RECT",floor($PosArray[2]-$ExtremityWidth).",".floor($Y-$ExtremityLength).",".floor($PosArray[3]+$ExtremityWidth).",".floor($Y+$ExtremityLength),$ImageMapColor,$ImageMapTitle,$Values); }
+ }
+
+ if ( $ShadowOnBoxesOnly ) { $this->pChartObject->Shadow = $RestoreShadow; }
+
+ if ( $PosArray[0] < $PosArray[1] )
+ $this->pChartObject->drawFilledRectangle($PosArray[0],$Y-$BoxOffset,$PosArray[1],$Y+$BoxOffset,$BoxUpSettings);
+ else
+ $this->pChartObject->drawFilledRectangle($PosArray[0],$Y-$BoxOffset,$PosArray[1],$Y+$BoxOffset,$BoxDownSettings);
+
+ if ( isset($PosArray[4]) )
+ $this->pChartObject->drawLine($PosArray[4],$Y-$ExtremityLength,$PosArray[4],$Y+$ExtremityLength,$MedianSettings);
+
+ $Y = $Y + $XStep;
+ }
+ }
+ }
+ }
+?> \ No newline at end of file
diff --git a/For Weekly Test/tricode/class/pSurface.class.php b/For Weekly Test/tricode/class/pSurface.class.php
new file mode 100644
index 0000000..f887ac0
--- /dev/null
+++ b/For Weekly Test/tricode/class/pSurface.class.php
@@ -0,0 +1,315 @@
+<?php
+ /*
+ pSurface - class to draw surface charts
+
+ Version : 2.1.2
+ Made by : Jean-Damien POGOLOTTI
+ Last Update : 03/08/11
+
+ This file can be distributed under the license you can find at :
+
+ http://www.pchart.net/license
+
+ You can find the whole class documentation on the pChart web site.
+ */
+
+ define("UNKNOWN" , 0.123456789);
+ define("IGNORED" , -1);
+
+ define("LABEL_POSITION_LEFT" , 880001);
+ define("LABEL_POSITION_RIGHT" , 880002);
+ define("LABEL_POSITION_TOP" , 880003);
+ define("LABEL_POSITION_BOTTOM" , 880004);
+
+ /* pStock class definition */
+ class pSurface
+ {
+ var $pChartObject;
+ var $GridSizeX;
+ var $GridSizeY;
+ var $Points;
+
+ /* Class creator */
+ function pSurface($pChartObject)
+ {
+ $this->pChartObject = $pChartObject;
+ $this->GridSize = 10;
+ $this->Points = "";
+ }
+
+ /* Define the grid size and initialise the 2D matrix */
+ function setGrid($XSize=10,$YSize=10)
+ {
+ for($X=0; $X<=$XSize; $X++) { for($Y=0; $Y<=$YSize; $Y++) { $this->Points[$X][$Y]=UNKNOWN; } }
+
+ $this->GridSizeX = $XSize;
+ $this->GridSizeY = $YSize;
+ }
+
+ /* Add a point on the grid */
+ function addPoint($X,$Y,$Value,$Force=TRUE)
+ {
+ if ( $X < 0 || $X >$this->GridSizeX ) { return(0); }
+ if ( $Y < 0 || $Y >$this->GridSizeY ) { return(0); }
+
+ if ( $this->Points[$X][$Y] == UNKNOWN || $Force )
+ $this->Points[$X][$Y] = $Value;
+ elseif ( $this->Points[$X][$Y] == UNKNOWN )
+ $this->Points[$X][$Y] = $Value;
+ else
+ $this->Points[$X][$Y] = ($this->Points[$X][$Y] + $Value)/2;
+ }
+
+ /* Write the X labels */
+ function writeXLabels($Format="")
+ {
+ $R = isset($Format["R"]) ? $Format["R"] : $this->pChartObject->FontColorR;
+ $G = isset($Format["G"]) ? $Format["G"] : $this->pChartObject->FontColorG;
+ $B = isset($Format["B"]) ? $Format["B"] : $this->pChartObject->FontColorB;
+ $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : $this->pChartObject->FontColorA;
+ $Angle = isset($Format["Angle"]) ? $Format["Angle"] : 0;
+ $Padding = isset($Format["Padding"]) ? $Format["Padding"] : 5;
+ $Position = isset($Format["Position"]) ? $Format["Position"] : LABEL_POSITION_TOP;
+ $Labels = isset($Format["Labels"]) ? $Format["Labels"] : NULL;
+ $CountOffset = isset($Format["CountOffset"]) ? $Format["CountOffset"] : 0;
+
+ if ( $Labels != NULL && !is_array($Labels) ) { $Label = $Labels; $Labels = ""; $Labels[] = $Label; }
+
+ $X0 = $this->pChartObject->GraphAreaX1;
+ $XSize = ($this->pChartObject->GraphAreaX2 - $this->pChartObject->GraphAreaX1) / ($this->GridSizeX+1);
+
+ $Settings = array("Angle"=>$Angle,"R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha);
+ if ( $Position == LABEL_POSITION_TOP )
+ {
+ $YPos = $this->pChartObject->GraphAreaY1 - $Padding;
+ if ($Angle == 0 ) { $Settings["Align"] = TEXT_ALIGN_BOTTOMMIDDLE; }
+ if ($Angle != 0 ) { $Settings["Align"] = TEXT_ALIGN_MIDDLELEFT; }
+ }
+ elseif ( $Position == LABEL_POSITION_BOTTOM )
+ {
+ $YPos = $this->pChartObject->GraphAreaY2 + $Padding;
+ if ($Angle == 0 ) { $Settings["Align"] = TEXT_ALIGN_TOPMIDDLE; }
+ if ($Angle != 0 ) { $Settings["Align"] = TEXT_ALIGN_MIDDLERIGHT; }
+ }
+ else
+ return(-1);
+
+ for($X=0;$X<=$this->GridSizeX;$X++)
+ {
+ $XPos = floor($X0+$X*$XSize + $XSize/2);
+
+ if( $Labels == NULL || !isset($Labels[$X]) )
+ $Value = $X+$CountOffset;
+ else
+ $Value = $Labels[$X];
+
+ $this->pChartObject->drawText($XPos,$YPos,$Value,$Settings);
+ }
+ }
+
+ /* Write the Y labels */
+ function writeYLabels($Format="")
+ {
+ $R = isset($Format["R"]) ? $Format["R"] : $this->pChartObject->FontColorR;
+ $G = isset($Format["G"]) ? $Format["G"] : $this->pChartObject->FontColorG;
+ $B = isset($Format["B"]) ? $Format["B"] : $this->pChartObject->FontColorB;
+ $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : $this->pChartObject->FontColorA;
+ $Angle = isset($Format["Angle"]) ? $Format["Angle"] : 0;
+ $Padding = isset($Format["Padding"]) ? $Format["Padding"] : 5;
+ $Position = isset($Format["Position"]) ? $Format["Position"] : LABEL_POSITION_LEFT;
+ $Labels = isset($Format["Labels"]) ? $Format["Labels"] : NULL;
+ $CountOffset = isset($Format["CountOffset"]) ? $Format["CountOffset"] : 0;
+
+ if ( $Labels != NULL && !is_array($Labels) ) { $Label = $Labels; $Labels = ""; $Labels[] = $Label; }
+
+ $Y0 = $this->pChartObject->GraphAreaY1;
+ $YSize = ($this->pChartObject->GraphAreaY2 - $this->pChartObject->GraphAreaY1) / ($this->GridSizeY+1);
+
+ $Settings = array("Angle"=>$Angle,"R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha);
+ if ( $Position == LABEL_POSITION_LEFT )
+ { $XPos = $this->pChartObject->GraphAreaX1 - $Padding; $Settings["Align"] = TEXT_ALIGN_MIDDLERIGHT; }
+ elseif ( $Position == LABEL_POSITION_RIGHT )
+ { $XPos = $this->pChartObject->GraphAreaX2 + $Padding; $Settings["Align"] = TEXT_ALIGN_MIDDLELEFT; }
+ else
+ return(-1);
+
+ for($Y=0;$Y<=$this->GridSizeY;$Y++)
+ {
+ $YPos = floor($Y0+$Y*$YSize + $YSize/2);
+
+ if( $Labels == NULL || !isset($Labels[$Y]) )
+ $Value = $Y+$CountOffset;
+ else
+ $Value = $Labels[$Y];
+
+ $this->pChartObject->drawText($XPos,$YPos,$Value,$Settings);
+ }
+ }
+
+ /* Draw the area arround the specified Threshold */
+ function drawContour($Threshold,$Format="")
+ {
+ $R = isset($Format["R"]) ? $Format["R"] : 0;
+ $G = isset($Format["G"]) ? $Format["G"] : 0;
+ $B = isset($Format["B"]) ? $Format["B"] : 0;
+ $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
+ $Ticks = isset($Format["Ticks"]) ? $Format["Ticks"] : 3;
+ $Padding = isset($Format["Padding"]) ? $Format["Padding"] : 0;
+
+ $X0 = $this->pChartObject->GraphAreaX1;
+ $Y0 = $this->pChartObject->GraphAreaY1;
+ $XSize = ($this->pChartObject->GraphAreaX2 - $this->pChartObject->GraphAreaX1) / ($this->GridSizeX+1);
+ $YSize = ($this->pChartObject->GraphAreaY2 - $this->pChartObject->GraphAreaY1) / ($this->GridSizeY+1);
+
+ $Color = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks);
+
+ for($X=0;$X<=$this->GridSizeX;$X++)
+ {
+ for($Y=0;$Y<=$this->GridSizeY;$Y++)
+ {
+ $Value = $this->Points[$X][$Y];
+
+ if ( $Value != UNKNOWN && $Value != IGNORED && $Value >= $Threshold)
+ {
+ $X1 = floor($X0+$X*$XSize)+$Padding;
+ $Y1 = floor($Y0+$Y*$YSize)+$Padding;
+ $X2 = floor($X0+$X*$XSize+$XSize);
+ $Y2 = floor($Y0+$Y*$YSize+$YSize);
+
+ if ( $X > 0 && $this->Points[$X-1][$Y] != UNKNOWN && $this->Points[$X-1][$Y] != IGNORED && $this->Points[$X-1][$Y] < $Threshold)
+ $this->pChartObject->drawLine($X1,$Y1,$X1,$Y2,$Color);
+ if ( $Y > 0 && $this->Points[$X][$Y-1] != UNKNOWN && $this->Points[$X][$Y-1] != IGNORED && $this->Points[$X][$Y-1] < $Threshold)
+ $this->pChartObject->drawLine($X1,$Y1,$X2,$Y1,$Color);
+ if ( $X < $this->GridSizeX && $this->Points[$X+1][$Y] != UNKNOWN && $this->Points[$X+1][$Y] != IGNORED && $this->Points[$X+1][$Y] < $Threshold)
+ $this->pChartObject->drawLine($X2,$Y1,$X2,$Y2,$Color);
+ if ( $Y < $this->GridSizeY && $this->Points[$X][$Y+1] != UNKNOWN && $this->Points[$X][$Y+1] != IGNORED && $this->Points[$X][$Y+1] < $Threshold)
+ $this->pChartObject->drawLine($X1,$Y2,$X2,$Y2,$Color);
+ }
+ }
+ }
+ }
+
+ /* Draw the surface chart */
+ function drawSurface($Format="")
+ {
+ $Palette = isset($Format["Palette"]) ? $Format["Palette"] : NULL;
+ $ShadeR1 = isset($Format["ShadeR1"]) ? $Format["ShadeR1"] : 77;
+ $ShadeG1 = isset($Format["ShadeG1"]) ? $Format["ShadeG1"] : 205;
+ $ShadeB1 = isset($Format["ShadeB1"]) ? $Format["ShadeB1"] : 21;
+ $ShadeA1 = isset($Format["ShadeA1"]) ? $Format["ShadeA1"] : 40;
+ $ShadeR2 = isset($Format["ShadeR2"]) ? $Format["ShadeR2"] : 227;
+ $ShadeG2 = isset($Format["ShadeG2"]) ? $Format["ShadeG2"] : 135;
+ $ShadeB2 = isset($Format["ShadeB2"]) ? $Format["ShadeB2"] : 61;
+ $ShadeA2 = isset($Format["ShadeA2"]) ? $Format["ShadeA2"] : 100;
+ $Border = isset($Format["Border"]) ? $Format["Border"] : FALSE;
+ $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : 0;
+ $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : 0;
+ $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : 0;
+ $Surrounding = isset($Format["Surrounding"]) ? $Format["Surrounding"] : -1;
+ $Padding = isset($Format["Padding"]) ? $Format["Padding"] : 1;
+
+ $X0 = $this->pChartObject->GraphAreaX1;
+ $Y0 = $this->pChartObject->GraphAreaY1;
+ $XSize = ($this->pChartObject->GraphAreaX2 - $this->pChartObject->GraphAreaX1) / ($this->GridSizeX+1);
+ $YSize = ($this->pChartObject->GraphAreaY2 - $this->pChartObject->GraphAreaY1) / ($this->GridSizeY+1);
+
+ for($X=0;$X<=$this->GridSizeX;$X++)
+ {
+ for($Y=0;$Y<=$this->GridSizeY;$Y++)
+ {
+ $Value = $this->Points[$X][$Y];
+
+ if ( $Value != UNKNOWN && $Value != IGNORED )
+ {
+ $X1 = floor($X0+$X*$XSize)+$Padding;
+ $Y1 = floor($Y0+$Y*$YSize)+$Padding;
+ $X2 = floor($X0+$X*$XSize+$XSize);
+ $Y2 = floor($Y0+$Y*$YSize+$YSize);
+
+ if ( $Palette != NULL )
+ {
+ if ( isset($Palette[$Value]) && isset($Palette[$Value]["R"]) ) { $R = $Palette[$Value]["R"]; } else { $R = 0; }
+ if ( isset($Palette[$Value]) && isset($Palette[$Value]["G"]) ) { $G = $Palette[$Value]["G"]; } else { $G = 0; }
+ if ( isset($Palette[$Value]) && isset($Palette[$Value]["B"]) ) { $B = $Palette[$Value]["B"]; } else { $B = 0; }
+ if ( isset($Palette[$Value]) && isset($Palette[$Value]["Alpha"]) ) { $Alpha = $Palette[$Value]["Alpha"]; } else { $Alpha = 1000; }
+ }
+ else
+ {
+ $R = (($ShadeR2-$ShadeR1)/100)*$Value + $ShadeR1;
+ $G = (($ShadeG2-$ShadeG1)/100)*$Value + $ShadeG1;
+ $B = (($ShadeB2-$ShadeB1)/100)*$Value + $ShadeB1;
+ $Alpha = (($ShadeA2-$ShadeA1)/100)*$Value + $ShadeA1;
+ }
+
+ $Settings = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha);
+ if ( $Border ) { $Settings["BorderR"] = $BorderR; $Settings["BorderG"] = $BorderG; $Settings["BorderB"] = $BorderB; }
+ if ( $Surrounding != -1 ) { $Settings["BorderR"] = $R+$Surrounding; $Settings["BorderG"] = $G+$Surrounding; $Settings["BorderB"] = $B+$Surrounding; }
+
+ $this->pChartObject->drawFilledRectangle($X1,$Y1,$X2-1,$Y2-1,$Settings);
+ }
+ }
+ }
+ }
+
+ /* Compute the missing points */
+ function computeMissing()
+ {
+ $Missing = "";
+ for($X=0;$X<=$this->GridSizeX;$X++)
+ {
+ for($Y=0;$Y<=$this->GridSizeY;$Y++)
+ {
+ if ( $this->Points[$X][$Y] == UNKNOWN )
+ $Missing[] = $X.",".$Y;
+ }
+ }
+ shuffle($Missing);
+
+ foreach($Missing as $Key => $Pos)
+ {
+ $Pos = preg_split("/,/",$Pos);
+ $X = $Pos[0];
+ $Y = $Pos[1];
+
+ if ( $this->Points[$X][$Y] == UNKNOWN )
+ {
+ $NearestNeighbor = $this->getNearestNeighbor($X,$Y);
+
+ $Value = 0; $Points = 0;
+ for($Xi=$X-$NearestNeighbor;$Xi<=$X+$NearestNeighbor;$Xi++)
+ {
+ for($Yi=$Y-$NearestNeighbor;$Yi<=$Y+$NearestNeighbor;$Yi++)
+ {
+ if ($Xi >=0 && $Yi >= 0 && $Xi <= $this->GridSizeX && $Yi <= $this->GridSizeY && $this->Points[$Xi][$Yi] != UNKNOWN && $this->Points[$Xi][$Yi] != IGNORED)
+ {
+ $Value = $Value + $this->Points[$Xi][$Yi]; $Points++;
+ }
+ }
+ }
+
+ if ( $Points != 0 ) { $this->Points[$X][$Y] = $Value / $Points; }
+ }
+ }
+ }
+
+ /* Return the nearest Neighbor distance of a point */
+ function getNearestNeighbor($Xp,$Yp)
+ {
+ $Nearest = UNKNOWN;
+ for($X=0;$X<=$this->GridSizeX;$X++)
+ {
+ for($Y=0;$Y<=$this->GridSizeY;$Y++)
+ {
+ if ( $this->Points[$X][$Y] != UNKNOWN && $this->Points[$X][$Y] != IGNORED )
+ {
+ $DistanceX = max($Xp,$X)-min($Xp,$X);
+ $DistanceY = max($Yp,$Y)-min($Yp,$Y);
+ $Distance = max($DistanceX,$DistanceY);
+ if ( $Distance < $Nearest || $Nearest == UNKNOWN ) { $Nearest = $Distance; }
+ }
+ }
+ }
+ return($Nearest);
+ }
+ }
+?> \ No newline at end of file
diff --git a/For Weekly Test/tricode/css/Critical.png b/For Weekly Test/tricode/css/Critical.png
new file mode 100644
index 0000000..e025d19
--- /dev/null
+++ b/For Weekly Test/tricode/css/Critical.png
Binary files differ
diff --git a/For Weekly Test/tricode/css/Help.png b/For Weekly Test/tricode/css/Help.png
new file mode 100644
index 0000000..42a8f7c
--- /dev/null
+++ b/For Weekly Test/tricode/css/Help.png
Binary files differ
diff --git a/For Weekly Test/tricode/css/Info.png b/For Weekly Test/tricode/css/Info.png
new file mode 100644
index 0000000..5a7a2c3
--- /dev/null
+++ b/For Weekly Test/tricode/css/Info.png
Binary files differ
diff --git a/For Weekly Test/tricode/css/Warning.png b/For Weekly Test/tricode/css/Warning.png
new file mode 100644
index 0000000..0af654e
--- /dev/null
+++ b/For Weekly Test/tricode/css/Warning.png
Binary files differ
diff --git a/For Weekly Test/tricode/css/chk_off.png b/For Weekly Test/tricode/css/chk_off.png
new file mode 100755
index 0000000..1514d51
--- /dev/null
+++ b/For Weekly Test/tricode/css/chk_off.png
Binary files differ
diff --git a/For Weekly Test/tricode/css/chk_on.png b/For Weekly Test/tricode/css/chk_on.png
new file mode 100755
index 0000000..a9925a0
--- /dev/null
+++ b/For Weekly Test/tricode/css/chk_on.png
Binary files differ
diff --git a/For Weekly Test/tricode/css/formCSS.css b/For Weekly Test/tricode/css/formCSS.css
new file mode 100644
index 0000000..f94bd72
--- /dev/null
+++ b/For Weekly Test/tricode/css/formCSS.css
@@ -0,0 +1,46 @@
+/* fancyform styles edited by Refik Hadzialic*/
+html
+{
+font-family:Arial,Helvetica,sans-serif;
+}
+.form label
+{
+display:block;
+padding:0.0em;
+padding-left:22px;
+/*background-position:9px center;*/
+background-repeat:no-repeat;
+/*border:1px solid #252525;*/
+clear:both;cursor:pointer;
+
+font-family:Arial,Helvetica,sans-serif;
+font-style:normal;
+font-size:15px;
+}
+
+.checked
+{
+background-color:#fff;
+background-image:url(chk_on.png);
+}
+
+.unchecked
+{
+background-color:#fff;
+background-image:url(chk_off.png);
+}
+
+.leftcol
+{
+float:left;
+clear:left;
+width:30%;
+}
+
+.rightcol
+{
+float:left;
+clear:right;
+width:50%;
+}
+
diff --git a/For Weekly Test/tricode/css/info_rhombus.png b/For Weekly Test/tricode/css/info_rhombus.png
new file mode 100644
index 0000000..036733e
--- /dev/null
+++ b/For Weekly Test/tricode/css/info_rhombus.png
Binary files differ
diff --git a/For Weekly Test/tricode/css/information.png b/For Weekly Test/tricode/css/information.png
new file mode 100644
index 0000000..93c67f2
--- /dev/null
+++ b/For Weekly Test/tricode/css/information.png
Binary files differ
diff --git a/For Weekly Test/tricode/css/link.gif b/For Weekly Test/tricode/css/link.gif
new file mode 100644
index 0000000..daada04
--- /dev/null
+++ b/For Weekly Test/tricode/css/link.gif
Binary files differ
diff --git a/For Weekly Test/tricode/css/tableCSS.css b/For Weekly Test/tricode/css/tableCSS.css
new file mode 100644
index 0000000..2a7f54d
--- /dev/null
+++ b/For Weekly Test/tricode/css/tableCSS.css
@@ -0,0 +1,146 @@
+/* -------------------------------------------------------
+Author: Vitaly Friedman but edited by Refik Hadzialic
+Theme: Green Life - A Fresh, Warm and Readable Table
+URL: http://www.alvit.de/vf
+-------------------------------------------------------
+*/
+
+ html {
+ height: 100%;
+ }
+ #main {
+ float: left;
+ width: 350px;
+ }
+ #sidebar
+ {
+ float: left;
+ width: 700px;
+ }
+ #footer
+ {
+ position: absolute;
+ bottom: 1px;
+ padding-top: 0px;
+ padding-right: 220px;
+ padding-left: 350px;
+ border: 1px solid black;
+ }
+ body {
+ background-color: #F0F0F0;
+ font-family: verdana, verdana, ariel;
+ height: 100%;
+ }
+
+ a.pChart
+ {
+ text-decoration: none;
+ color: #6A6A6A;
+ }
+
+ table {
+ font: 11px verdana,verdana, arial;
+ margin: 0;
+ padding: 0;
+ border-collapse: collapse;
+ text-align: left;
+ color: #333;
+ line-height: 19px;
+ }
+
+ caption {
+ font-size: 14px;
+ font-weight: bold;
+ margin-bottom: 20px;
+ text-align: left;
+ text-transform: uppercase;
+ }
+
+ td {
+ margin: 0;
+ padding: 20px 10px;
+ border: 1px dotted #f5f5f5;
+ }
+
+
+ th {
+ font-weight: normal;
+ text-transform: uppercase;
+ }
+
+ thead tr th {
+ background-color: #575757;
+ padding: 20px 10px;
+ color: #fff;
+ font-weight: bold;
+ border-right: 2px solid #333;
+ text-transform: uppercase;
+ text-align:center;
+ }
+
+ tfoot tr th, tfoot tr td {
+ background-color: transparent;
+ padding: 20px 10px;
+ color: #ccc;
+ border-top: 1px solid #ccc;
+ }
+
+ tbody tr th {
+ padding: 20px 10px;
+ border-bottom: 1px dotted #fafafa;
+ }
+
+ tr {
+ background-color: #FBFDF6;
+ }
+ tr.odd {
+ background-color: #EDF7DC;
+ }
+
+ tr:hover {
+ }
+
+ tr:hover td, tr:hover td a, tr:hover th a {
+ color: #a10000;
+ }
+
+ td:hover {
+ }
+
+ tr:hover th a:hover {
+ background-color: #F7FBEF;
+ border-bottom: 2px solid #86C200;
+ }
+
+ table a {
+ color: #608117;
+ background-image: none;
+ text-decoration: none;
+ border-bottom: 1px dotted #8A8F95;
+ padding: 2px;
+ padding-right: 12px; background: transparent url(link.gif) no-repeat 100% 50%;
+ }
+
+ table a:hover {
+ color: #BBC4CD;
+ background-image: none;
+ text-decoration: none;
+ border-bottom: 3px solid #333;
+ padding: 2px;
+ padding-right: 12px; color: #A2A2A2; background: transparent url(link.gif) no-repeat 100% 50%;
+ }
+
+ table a:visited {
+ text-decoration: none;
+ border-bottom: 1px dotted #333;
+ text-decoration: none;
+ padding-right: 12px; color: #A2A2A2; background: transparent url(visitedLink.gif) no-repeat 100% 50%;
+ }
+
+ table a:visited:hover {
+ background-image: none;
+ text-decoration: none;
+ border-bottom: 3px solid #333;
+ padding: 2px;
+ padding-right: 12px; color: #A2A2A2; background: transparent url(visitedLink.gif) no-repeat 100% 50%;
+ }
diff --git a/For Weekly Test/tricode/css/tooltip.css b/For Weekly Test/tricode/css/tooltip.css
new file mode 100644
index 0000000..3a50734
--- /dev/null
+++ b/For Weekly Test/tricode/css/tooltip.css
@@ -0,0 +1,33 @@
+.tooltip {
+ border-bottom: 1px dotted #000000; color: #000000; outline: none;
+ cursor: help; text-decoration: none;
+ position: relative;
+ }
+ .tooltip span {
+ margin-left: -999em;
+ position: absolute;
+ }
+ .tooltip:hover span {
+ border-radius: 5px 5px; -moz-border-radius: 5px; -webkit-border-radius: 5px;
+ box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.1); -webkit-box-shadow: 5px 5px rgba(0, 0, 0, 0.1); -moz-box-shadow: 5px 5px rgba(0, 0, 0, 0.1);
+ font-family: Calibri, Tahoma, Geneva, sans-serif;
+ position: absolute; left: 1em; top: 2em; z-index: 99;
+ margin-left: 0; width: 250px;
+ }
+ .tooltip:hover img {
+ border: 0; margin: -10px 0 0 -55px;
+ float: left; position: absolute;
+ }
+ .tooltip:hover em {
+ font-family: Candara, Tahoma, Geneva, sans-serif; font-size: 1.2em; font-weight: bold;
+ display: block; padding: 0.2em 0 0.6em 0;
+ }
+ .classic { padding: 0.8em 1em; }
+ .custom { padding: 0.5em 0.8em 0.8em 2em; }
+ * html a:hover { background: transparent; }
+ .classic {background: #f8ff88; border: 1px solid #FFAD33; }
+ .critical { background: #f8ff88; border: 1px solid #FF3334; }
+ .help { background: #f8ff88; border: 1px solid #2BB0D7; }
+ .info { background: #f8ff88; border: 1px solid #2BB0D7; }
+ .warning { background: #f8ff88; border: 1px solid #FFAD33; }
+
diff --git a/For Weekly Test/tricode/css/visitedLink.gif b/For Weekly Test/tricode/css/visitedLink.gif
new file mode 100644
index 0000000..f7f1867
--- /dev/null
+++ b/For Weekly Test/tricode/css/visitedLink.gif
Binary files differ
diff --git a/For Weekly Test/tricode/delayedLoading.js b/For Weekly Test/tricode/delayedLoading.js
new file mode 100644
index 0000000..b76bbe3
--- /dev/null
+++ b/For Weekly Test/tricode/delayedLoading.js
@@ -0,0 +1,228 @@
+ /*
+ delayedLoader - JS to delay out of sight pictures rendering
+
+ Version : 2.0.2
+ Made by : Jean-Damien POGOLOTTI
+ Last Update : 10/12/10
+
+ This file can be distributed under the license you can find at :
+
+ http://www.pchart.net/license
+
+ You can find the whole class documentation on the pChart web site.
+ */
+
+ var PictureCache = new Array();
+ var PictureCount = 0;
+ var WaitPicture = "wait.gif";
+ var DivClassName = "pChart";
+ var DefaultWidth = 70;
+ var DefaultHeight = 230;
+ var DefaultAlt = "pChart rendered picture";
+
+
+ /* Do the DOM document processing */
+ function loaderInit()
+ {
+ WindowSize = getWindowSize();
+ WindowHeight = WindowSize[1];
+ Offset = getScrollXY();
+ HeightOffset = Offset[1];
+
+ /* Enumerate the tags */
+ Links = document.getElementsByTagName("a");
+ for (i = 0; i < Links.length; i++)
+ {
+ className = Links[i].className;
+
+ if ( className == DivClassName )
+ {
+ ObjectWidth = Links[i].getAttribute("data-pchart-width");
+ ObjectHeight = Links[i].getAttribute("data-pchart-height");
+ ObjectID = Links[i].id;
+ ObjectTop = Links[i].offsetTop;
+ ObjectURL = Links[i].href;
+ ObjectAlt = Links[i].getAttribute("data-pchart-alt");
+
+ if ( ObjectWidth == null ) { ObjectWidth = DefaultWidth; }
+ if ( ObjectHeight == null ) { ObjectHeight = DefaultHeight; }
+ if ( ObjectAlt == null ) { ObjectAlt = DefaultAlt; }
+
+ if (ObjectID == "") { ObjectID = "pChart-"+i; Links[i].id = ObjectID; }
+
+ PictureCache[PictureCount] = new Array();
+ PictureCache[PictureCount][0] = ObjectID;
+ PictureCache[PictureCount][1] = ObjectTop;
+ PictureCache[PictureCount][2] = ObjectURL;
+ PictureCache[PictureCount][3] = ObjectAlt;
+ PictureCache[PictureCount][4] = ObjectWidth;
+ PictureCache[PictureCount][5] = ObjectHeight;
+
+ PictureCount++;
+ }
+ }
+
+ /* Replace the <A> tags by <DIV> ones and attach the loader */
+ for(i=0;i<PictureCount;i++)
+ {
+ ATag = document.getElementById(PictureCache[i][0]);
+ DivTag = document.createElement("div");
+ DivID = "pChart-Div"+i; PictureCache[i][0] = DivID;
+
+ DivTag.setAttribute("id", DivID);
+ DivTag.style.width = PictureCache[i][4];
+ DivTag.style.height = PictureCache[i][5];
+ DivTag.style.backgroundColor = "#E0E0E0";
+
+ DivTag2 = ATag.parentNode.replaceChild(DivTag, ATag);
+
+ DivTop = DivTag.offsetTop;
+ PictureCache[i][1] = DivTop;
+
+ changeOpac(50, i);
+ changeContent("<img src='"+WaitPicture+"' width=24 height=24 alt=''/>",i);
+
+ if ( HeightOffset + WindowHeight > PictureCache[i][1] ) { triggerVisible(i); }
+ }
+ }
+
+ /* Replace the contents of the delayed loading DIV */
+ function changeContent(html, id)
+ { DivID = PictureCache[id][0]; document.getElementById(DivID).innerHTML = html; }
+
+ /* Trigger the picture rendering when the pChart DIV became visible */
+ function triggerVisible(PictureID)
+ {
+ if ( !PictureCache[PictureID][6] == true )
+ {
+ PictureCache[PictureID][6] = true;
+ ajaxRender(PictureCache[PictureID][2],PictureID);
+ }
+ }
+
+ /* Catch the navigator window scrolling event */
+ function scrollEvent()
+ {
+ WindowSize = getWindowSize();
+ WindowHeight = WindowSize[1];
+ Offset = getScrollXY();
+ HeightOffset = Offset[1];
+
+ for(i=0;i<=PictureCount-1;i++) { if ( HeightOffset + WindowHeight > PictureCache[i][1] ) { triggerVisible(i); } }
+ }
+
+ /* Cross browser X/Y window offset gatherer */
+ function getScrollXY()
+ {
+ var scrOfX = 0, scrOfY = 0;
+
+ if( typeof( window.pageYOffset ) == 'number' )
+ { scrOfY = window.pageYOffset; scrOfX = window.pageXOffset; }
+ else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) )
+ { scrOfY = document.body.scrollTop; scrOfX = document.body.scrollLeft; }
+ else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) )
+ { scrOfY = document.documentElement.scrollTop; scrOfX = document.documentElement.scrollLeft; }
+
+ return [ scrOfX, scrOfY ];
+ }
+
+ /* Cross browser X/Y window size gatherer */
+ function getWindowSize()
+ {
+ var myWidth = 0, myHeight = 0;
+
+ if( typeof( window.innerWidth ) == 'number' )
+ { myWidth = window.innerWidth; myHeight = window.innerHeight; }
+ else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) )
+ { myWidth = document.documentElement.clientWidth; myHeight = document.documentElement.clientHeight; }
+ else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) )
+ { myWidth = document.body.clientWidth; myHeight = document.body.clientHeight; }
+
+ return [ myWidth, myHeight ];
+ }
+
+ /* Cross browser alpha transparency changer */
+ function changeOpac(opacity, id)
+ {
+ DivID = PictureCache[id][0];
+
+ var object = document.getElementById(DivID).style;
+ object.opacity = (opacity / 100);
+ object.MozOpacity = (opacity / 100);
+ object.KhtmlOpacity = (opacity / 100);
+ object.filter = "alpha(opacity=" + opacity + ")";
+ }
+
+ /* Shade in-out function */
+ function opacity(id, opacStart, opacEnd, millisec)
+ {
+ var speed = Math.round(millisec / 100);
+ var timer = 0;
+
+ if(opacStart > opacEnd)
+ {
+ for(i = opacStart; i >= opacEnd; i--)
+ {
+ setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed));
+ timer++;
+ }
+ }
+ else if(opacStart < opacEnd)
+ {
+ for(i = opacStart; i <= opacEnd; i++)
+ {
+ setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed));
+ timer++;
+ }
+ }
+ }
+
+ /* Start the loader */
+ function StartFade(PictureID)
+ {
+ Loader = new Image();
+ URL = PictureCache[PictureID][2];
+ Loader.src = URL;
+ setTimeout("CheckLoadingStatus("+PictureID+")", 200);
+ }
+
+ /* check the picture loading status */
+ function CheckLoadingStatus(PictureID)
+ {
+ DivID = PictureCache[PictureID][0];
+ URL = PictureCache[PictureID][2];
+ Alt = PictureCache[PictureID][3];
+
+ if ( Loader.complete == true )
+ {
+ changeOpac(0, PictureID);
+ HTMLResult = "<center><img src='" + URL + "' alt='"+Alt+"'/></center>";
+ document.getElementById(DivID).innerHTML = HTMLResult;
+
+ opacity(PictureID,0,100,100);
+ }
+ else
+ setTimeout("CheckLoadingStatus("+PictureID+")", 200);
+ }
+
+ /* Compute the pChart picture in background */
+ function ajaxRender(URL,PictureID)
+ {
+ var xmlhttp=false;
+ /*@cc_on @*/
+ /*@if (@_jscript_version >= 5)
+ try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch (E) { xmlhttp = false; } }
+ @end @*/
+
+ if (!xmlhttp && typeof XMLHttpRequest!='undefined')
+ { try { xmlhttp = new XMLHttpRequest(); } catch (e) { xmlhttp=false; } }
+
+ if (!xmlhttp && window.createRequest)
+ { try { xmlhttp = window.createRequest(); } catch (e) { xmlhttp=false; } }
+
+ xmlhttp.open("GET", URL,true);
+
+ xmlhttp.onreadystatechange=function()
+ { if (xmlhttp.readyState==4) { StartFade(PictureID); } }
+ xmlhttp.send(null)
+ }
diff --git a/For Weekly Test/tricode/execute.php b/For Weekly Test/tricode/execute.php
new file mode 100755
index 0000000..a384da1
--- /dev/null
+++ b/For Weekly Test/tricode/execute.php
@@ -0,0 +1,30 @@
+<html>
+<head>
+<script src='delayedLoading.js' type="text/javascript"></script>
+<!--ADD HERE ALL THE NEEDED META DATA -->
+<title>Network test live results!</title>
+<link rel="stylesheet" href="css/tableCSS.css" type="text/css" media="screen">
+</head>
+<body onscroll="scrollEvent();" onload="loaderInit();">
+<div>
+<?php
+ $ip = "localhost";
+ $port = 34600;
+ $startApp = fsockopen($ip, $port, $errno, $error, 5);
+ if (!$startApp)
+ {
+ printf('ERROR');
+ }
+ else
+ {
+ socket_set_timeout( $startApp, 50); //one should set the number of the longest test, so we can define the timeout
+ fwrite($startApp, "START APP");
+ usleep(500);
+ fclose($startApp);
+
+ }
+?>
+</div>
+</body>
+</html>
+
diff --git a/For Weekly Test/tricode/fonts/Bedizen.ttf b/For Weekly Test/tricode/fonts/Bedizen.ttf
new file mode 100644
index 0000000..d115733
--- /dev/null
+++ b/For Weekly Test/tricode/fonts/Bedizen.ttf
Binary files differ
diff --git a/For Weekly Test/tricode/fonts/Forgotte.ttf b/For Weekly Test/tricode/fonts/Forgotte.ttf
new file mode 100644
index 0000000..a2f7f4a
--- /dev/null
+++ b/For Weekly Test/tricode/fonts/Forgotte.ttf
Binary files differ
diff --git a/For Weekly Test/tricode/fonts/GeosansLight.ttf b/For Weekly Test/tricode/fonts/GeosansLight.ttf
new file mode 100644
index 0000000..055932a
--- /dev/null
+++ b/For Weekly Test/tricode/fonts/GeosansLight.ttf
Binary files differ
diff --git a/For Weekly Test/tricode/fonts/MankSans.ttf b/For Weekly Test/tricode/fonts/MankSans.ttf
new file mode 100644
index 0000000..a6146a9
--- /dev/null
+++ b/For Weekly Test/tricode/fonts/MankSans.ttf
Binary files differ
diff --git a/For Weekly Test/tricode/fonts/Silkscreen.ttf b/For Weekly Test/tricode/fonts/Silkscreen.ttf
new file mode 100644
index 0000000..ae4425d
--- /dev/null
+++ b/For Weekly Test/tricode/fonts/Silkscreen.ttf
Binary files differ
diff --git a/For Weekly Test/tricode/fonts/advent_light.ttf b/For Weekly Test/tricode/fonts/advent_light.ttf
new file mode 100644
index 0000000..514030a
--- /dev/null
+++ b/For Weekly Test/tricode/fonts/advent_light.ttf
Binary files differ
diff --git a/For Weekly Test/tricode/fonts/calibri.ttf b/For Weekly Test/tricode/fonts/calibri.ttf
new file mode 100644
index 0000000..8b6e3c9
--- /dev/null
+++ b/For Weekly Test/tricode/fonts/calibri.ttf
Binary files differ
diff --git a/For Weekly Test/tricode/fonts/pf_arma_five.ttf b/For Weekly Test/tricode/fonts/pf_arma_five.ttf
new file mode 100644
index 0000000..db04ec3
--- /dev/null
+++ b/For Weekly Test/tricode/fonts/pf_arma_five.ttf
Binary files differ
diff --git a/For Weekly Test/tricode/fonts/verdana.ttf b/For Weekly Test/tricode/fonts/verdana.ttf
new file mode 100644
index 0000000..5a059d2
--- /dev/null
+++ b/For Weekly Test/tricode/fonts/verdana.ttf
Binary files differ
diff --git a/For Weekly Test/tricode/gsmselftest-website.py b/For Weekly Test/tricode/gsmselftest-website.py
new file mode 100755
index 0000000..d653404
--- /dev/null
+++ b/For Weekly Test/tricode/gsmselftest-website.py
@@ -0,0 +1,480 @@
+#! /usr/bin/env python
+from serial import * #serial port library
+import sys
+import ControllerClass
+import DbClass
+import PingClass
+import trueTableClass
+import initTestClass
+import usbDetectClass
+from time import sleep
+
+global resultsList
+resultsList = list()
+
+GSMListPrefix = [['GSMExt.Tm','0151'],['GSMExt.Tm','0160'],['GSMExt.Tm','0170'],['GSMExt.Tm','0171'],['GSMExt.Tm','0175'],['GSMExt.Voda','0152'],['GSMExt.Voda','0162'],['GSMExt.Voda','0172'],['GSMExt.Voda','0173'],['GSMExt.Voda','0174'],['GSMExt.Eplus','0157'],['GSMExt.Eplus','0177'],['GSMExt.Eplus','0155'],['GSMExt.Eplus','0163'],['GSMExt.Eplus','0178'],['GSMExt.O2','0159'],['GSMExt.O2','0176'],['GSMExt.O2','0179'],['GSMRZ1','0761']]
+
+
+def allPing():
+
+ global sipGate
+ global sipServer
+ global unisip
+ global gsmBox1
+ global gsmBox2
+
+ server = PingClass.Ping('sipgate.de')
+ sipGate = server.ping(2)
+
+ server = PingClass.Ping('132.230.4.8')
+ sipServer = server.ping(2)
+
+ server = PingClass.Ping('132.230.252.228')
+ unisip = server.ping(2)
+
+ server = PingClass.Ping('localhost')
+ gsmBox1 = server.ping(2)
+
+ server = PingClass.Ping('10.4.58.241')
+ gsmBox2 = server.ping(2)
+
+def initDB():
+ global dbStatus
+ global db
+
+ db = DbClass.DBMySQLConnection('root', 'randompasswordSQL', 'localhost', 'gsmselftesting')
+ db.connectDB()
+ dbStatus = db.connectDB()
+
+
+def initTrueTable(x):
+ initResult = trueTableClass.trueTable(x)
+ initResult.initTrueTable()
+ print '\n'
+ openBSC = None
+
+ for x in initResult.nanoBts:
+ name = x[0]
+ if x[1] == True:
+ openBSC = True
+ asterikServer = True
+ else:
+ if int(x[1]) == 486:
+ print name+ ' not Working'
+ elif int(x[1]) == 200:
+ print name+ ' Working'
+ else:
+ print name+ ' not Working, handler error'
+ print ''
+ if openBSC != None:
+ if openBSC == True:
+ print 'openBSC working'
+ else:
+ print 'openBSC doesnt work'
+ print ''
+
+ if initResult.asteriskServer == True:
+ print 'asterik server is working'
+ print '\n'
+
+ if initResult.outGoingRZ == True:
+ print 'Outgoing call from RZ is working'
+ elif initResult.outGoingRZ == False:
+ print 'Outgoing call from RZ is not working'
+
+ if initResult.incomingRZ == True:
+ print 'incoming call from outside RZ to GSM RZ is working'
+ elif initResult.incomingRZ == False:
+ print 'incoming call from outside RZ to GSM RZ is not working'
+ print '\n'
+
+
+def doSipTest():
+
+ #destList = ['gsmr1','gsmr2', 'gsmr3', 'landline', 'unisip', 'GSMExt.O2', 'GSMExt.Voda', 'GSMExt.Eplus', 'GSMExt.Tm' ]
+ destList = ['landline']
+ print "test"
+ doTest = initTestClass.doTest()
+ print 'iam here'
+ for callTo in destList:
+
+ callFrom = 'sip'
+ doTest.initTest(callFrom,callTo)
+ resultsList.append([callFrom, callTo, doTest.result])
+
+def doLandlineTest():
+
+ destList = ['GSMRZ1','unisip', 'GSMRZ2','GSMRZ3']
+ doTest = initTestClass.doTest()
+ for callTo in destList:
+
+ callFrom = 'landline'
+ doTest.initTest(callFrom,callTo)
+ resultsList.append([callFrom, callTo, doTest.result])
+ initTrueTable(resultsList)
+
+def doGsmrzTest():
+
+ destList = ['GSMRZ1','GSMRZ2', 'GSMRZ3']
+ callList = ['sip']
+ doTest = initTestClass.doTest()
+
+ for callFrom in callList:
+
+ for callTo in destList:
+ doTest.initTest(callFrom,callTo)
+ resultsList.append([callFrom, callTo, doTest.result])
+ initTrueTable(resultsList)
+
+def doGsmExtTest():
+
+ destList = ['GSMExt.O2', 'GSMExt.Voda', 'GSMExt.Eplus', 'GSMExt.Tm']
+ callList = ['sip']
+
+ doTest = initTestClass.doTest()
+
+ for callFrom in callList:
+ for callTo in destList:
+ doTest.initTest(callFrom,callTo)
+ resultsList.append([callFrom, callTo, doTest.result])
+ initTrueTable(resultsList)
+
+def doAllTest():
+
+ doSipTest()
+ doLandlineTest()
+ doGsmrzTest()
+ doGsmExtTest()
+
+def regularTest():
+ regulartest = initTestClass.doTest()
+ regulartest.smartTest()
+ initTrueTable(regulartest.smartResultList)
+
+def withDB():
+
+ initDB()
+ resultsList = list()
+ if dbStatus == 1: # Checking connection to database
+ if db.anyTasksToDo() == 1: # Checking task on the table
+
+ allPing()
+ i=0
+ makeTest = initTestClass.doTest()
+
+ for item in db.tasksList:
+
+ taskID = item[0]
+ taskNo = item[1]
+ callFrom = item[2]
+ callTo = item[3]
+
+ if i == 0:
+ db.updatePingResult(taskNo, sipServer, sipGate, unisip, gsmBox1, gsmBox2)
+ print '\n'
+ print 'Task ID :', taskID
+ print 'Calling From :', callFrom
+ print 'To :', callTo
+
+
+ makeTest.initTest(callFrom,callTo)
+
+ db.addResult(taskID, makeTest.result)
+
+ resultsList.append([callFrom, callTo, makeTest.result])
+
+ db.errorCode(makeTest.result)
+ print 'Result : ' +makeTest.result+ ' ' +db.errCode
+
+ db.deleteTempTask(taskID)
+ i = i+1
+
+ db.cleanTasksList()
+
+ print '\n'
+
+ initTrueTable(resultsList) # fetch result list and make adjustment about the result
+ db.closeDBConn()
+ else:
+ print "--- No job at all ---"
+ db.closeDBConn()
+ else:
+ print 'Cant connect to database'
+ sys.exit(1)
+
+def findPort(portName): # take information in existing usb port
+ global connect
+ global prefix
+ global num
+ global IMEI
+ global portClass
+ sleep(0.5)
+ portLog = os.popen('dmesg | grep \'pl2303 converter now attached to '+portName+'\'').read()
+ sleep(0.5)
+ if portLog != '':
+ connect = 1
+ portClass = usbDetectClass.serialPort(portName)
+ portClass.findNumber()
+ portClass.findIMEI()
+ IMEI = portClass.IMEI
+ num = portClass.number
+ number = portClass.number
+ prefix = number[0:4]
+ else:
+ connect = 0
+
+def initDevice(deviceName):
+ print 'Device Name :',deviceName
+ print ' Device IMEI : ',
+ imei = sys.stdin.readline().rstrip("\r\n")
+ print 'Phone number : ',
+ number = sys.stdin.readline().rstrip("\r\n")
+ print 'Port Name : /dev/',
+ portName = sys.stdin.readline().rstrip("\r\n")
+ print ''
+
+ if imei == '' or portName == '':
+ print ' == cant save device configuration, please fill IMEI / port name of the device =='
+ else:
+ findPort(portName)
+ if connect == 1:
+ if str(IMEI) != str(imei) and str(num) != str(number):
+ print '== error, device not found =='
+ elif str(IMEI) == str(imei):
+ portClass.initUpdate(deviceName, portName, number)
+ print '== Device succeced added =='
+ elif str(num) == str(number) and str(IMEI) != str(imei):
+ portClass.initUpdate(deviceName, portName, number)
+ print '== Device succeced added, but have different IMEI =='
+ else:
+ print '== error, no device connected =='
+
+
+def updateDevice(): #update port name list of device on DB
+ quit = False
+ while quit != True:
+ print ''
+ print "USB Mobile device configuration"
+ print "Menu: a = automatic device configuration, m = Manual configuration, q = quit : ",
+ input = sys.stdin.readline().rstrip("\r\n")
+ print ''
+ if input == 'm': # manual configuration
+
+ while True:
+ print ''
+ print "Mobile device name: "
+ print " 1. GSM O2"
+ print " 2. GSM Vodafone"
+ print " 3. GSM Eplus"
+ print " 4. GSM T-Mobile"
+ print " 5. GSM RZ 1"
+ print " 6. Back to menu"
+ print ""
+ print "your choise : ",
+ input = sys.stdin.readline().rstrip("\r\n")
+
+ if input == '8':
+ break
+ elif input == '1':
+ initDevice('GSMExt.O2')
+ elif input == '2':
+ initDevice('GSMExt.Voda')
+ elif input == '3':
+ initDevice('GSMExt.Eplus')
+ elif input == '4':
+ initDevice('GSMExt.Tm')
+ elif input == '5':
+ initDevice('GSMRZ1')
+ else:
+ print 'please choose between 1-6'
+ if input == 'a': #automatic configuration
+ i = 0
+ x = 0
+ while i !=10:
+ portName ='ttyUSB'+str(i) #checking usb connection
+ findPort(portName)
+ i=i+1
+ if connect == 1:
+ for listNum in GSMListPrefix:
+ if prefix == listNum[1]:
+ print 'Device Name :',listNum[0]
+ print 'IMEI :',IMEI
+ print 'Phone Number :',num
+ print 'Port Name : /dev/'+portName
+ x=x+1
+ newPortName = '/dev/'+portName
+ portClass.initUpdate(listNum[0], newPortName, num)
+ print '\n'
+
+ print '== FINISH =='
+ print 'Found '+str(x)+' devices'
+
+ if input == "q":
+ break
+ sys.exit()
+
+def closeFunction(dbConn,serverSocket):
+ print 'Release the mutex: ' + str(dbConn.releaseMutex())
+ print 'Close the DB Connection: ' + str(dbConn.closeDBConn())
+ del dbConn
+ del serverSocket
+ sys.exit()
+
+if len(sys.argv) > 1:
+
+ command = sys.argv[1]
+ print ' '
+
+ if command == '--all':
+ resultsList = list()
+ doAllTest()
+
+ elif command == '--sip':
+ resultsList = list()
+ doSipTest()
+
+ elif command == '--gsmrz':
+ resultsList = list()
+ doGsmrzTest()
+
+ elif command == '--gsmext':
+ resultsList = list()
+ doGsmExtTest()
+
+ elif command == '--landline':
+ resultsList = list()
+ doLandlineTest()
+
+ elif command == '--smart':
+ resultsList = list()
+ regularTest()
+
+ elif command == '--devconf':
+ updateDevice()
+
+ elif command == '--db':
+ resultsList = list()
+ withDB()
+
+ elif command == '--help':
+ file = open('help.txt', 'r')
+ print file.read()
+
+ else:
+ print "command not found, Type '--help', '--credits' for more information."
+ print '\n'
+else:
+
+ initDB()
+ resultsList = list()
+ if dbStatus == 1:
+ server = ServerClassSoftware.ServerHandlerSoftware(34500) #define the port
+ tried = server.openSocket(3)
+
+ if tried == 'TIMEOUT':
+ closeFunction(db,server)
+
+ test = server.receiveData(2)
+ if test == 'TIMEOUT':
+ closeFunction(db,server)
+
+ print test
+ if test == 'START TEST':
+ server.sendData('CONFIRM\n')
+ print 'TEST STARTED'
+ else:
+ sys.exit('WE DIDN\'T RECEIVE THE CONFIRMATION')
+
+ if db.anyTasksToDo() == 1:
+
+ allPing()
+ i=0
+ makeTest = initTestClass.doTest()
+ for item in db.tasksList:
+
+ taskID = item[0]
+ taskNo = item[1]
+ callFrom = item[2]
+ callTo = item[3]
+
+ if i == 0:
+ db.updatePingResult(taskNo, sipServer, sipGate, unisip, gsmBox1, gsmBox2)
+ print '\n'
+ print 'Task ID :', taskID
+ print 'Calling From :', callFrom
+ print 'To :', callTo
+
+
+ makeTest.initTest(callFrom,callTo)
+
+ db.addResult(taskID, makeTest.result)
+
+ resultsList.append([callFrom, callTo, makeTest.result])
+
+ db.errorCode(makeTest.result)
+ print 'Result : ' +makeTest.result+ ' ' +db.errCode
+
+ message = '|' + str(callFrom) + '|' + str(callTo) + '|' + str(makeTest.result) + '|' + str(db.errCode)
+
+ if server.sendData(message+ chr(10)) == 1:
+ print 'data sent successfully'
+ test = server.receiveData(2)
+ if test == 'TIMEOUT':
+ closeFunction(db,server)
+ print test
+ if test == 'CONTINUE':
+ print 'continue test'
+
+ db.deleteTempTask(taskID)
+ i = i+1
+
+ db.cleanTasksList()
+
+ if server.connected == 1:
+ server.sendData('TEST DONE\n')
+ test = server.receiveData(2)
+
+ if test == 'TIMEOUT':
+ closeFunction(db,server)
+
+ if test == 'DISCONNECT':
+ close = server.closeConnection()
+ if close == 1:
+ print 'Closed connection successfully'
+
+ print 'release mutex says ', db.releaseMutex()
+ print '\n'
+
+ #initTrueTable(resultsList) # fetch result list and make adjustment about the result
+ else:
+ print "--- No job at all ---"
+ else:
+ sys.exit(1)
+
+print db.closeDBConn()
+del db
+del server
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/For Weekly Test/tricode/gsmselftest-website2.py b/For Weekly Test/tricode/gsmselftest-website2.py
new file mode 100755
index 0000000..2e9ecea
--- /dev/null
+++ b/For Weekly Test/tricode/gsmselftest-website2.py
@@ -0,0 +1,461 @@
+#! /usr/bin/env python
+from serial import * #serial port library
+import sys
+import ControllerClass
+import DbClass
+import PingClass
+import trueTableClass
+import initTestClass
+import usbDetectClass
+import ServerClassSoftware
+from time import sleep
+
+global resultsList
+resultsList = list()
+
+GSMListPrefix = [['GSMExt.Tm','0151'],['GSMExt.Tm','0160'],['GSMExt.Tm','0170'],['GSMExt.Tm','0171'],['GSMExt.Tm','0175'],['GSMExt.Voda','0152'],['GSMExt.Voda','0162'],['GSMExt.Voda','0172'],['GSMExt.Voda','0173'],['GSMExt.Voda','0174'],['GSMExt.Eplus','0157'],['GSMExt.Eplus','0177'],['GSMExt.Eplus','0155'],['GSMExt.Eplus','0163'],['GSMExt.Eplus','0178'],['GSMExt.O2','0159'],['GSMExt.O2','0176'],['GSMExt.O2','0179'],['GSMRZ1','0761']]
+
+
+def allPing(): #ping all existing devices
+
+ global sipGate
+ global sipServer
+ global unisip
+ global gsmBox1
+ global gsmBox2
+
+ server = PingClass.Ping('sipgate.de')
+ sipGate = server.ping(2)
+
+ server = PingClass.Ping('132.230.4.8')
+ sipServer = server.ping(2)
+
+ server = PingClass.Ping('132.230.252.228')
+ unisip = server.ping(2)
+
+ server = PingClass.Ping('localhost')
+ gsmBox1 = server.ping(2)
+
+ server = PingClass.Ping('10.4.58.241')
+ gsmBox2 = server.ping(2)
+
+def initDB(): # function for connection database
+ global dbStatus
+ global db
+
+ db = DbClass.DBMySQLConnection('root', 'randompasswordSQL', 'localhost', 'gsmselftesting')
+ db.connectDB()
+ dbStatus = db.connectDB()
+ if dbStatus == 1:
+ print 'Lock the mutex: ' + str(db.lockMutex(600))
+
+def initTrueTable(x):
+ initResult = trueTableClass.trueTable(x)
+ initResult.initTrueTable()
+ print '\n'
+ openBSC = None
+
+ for x in initResult.nanoBts:
+ name = x[0]
+ if x[1] == True:
+ openBSC = True
+ asterikServer = True
+ print name+ ' Working'
+ else:
+ if int(x[1]) == 486:
+ print name+ ' not Working'
+ elif int(x[1]) == 200:
+ print name+ ' Working'
+ elif int(x[1]) == 998 or int(x[1]) == 999:
+ print name+ ' not Working, handler error'
+ else:
+ print name+ ' not Working'
+ print ''
+ if openBSC != None:
+ if openBSC == True:
+ print 'openBSC working'
+ else:
+ print 'openBSC doesnt work'
+ print ''
+
+ if initResult.asteriskServer == True:
+ print 'asterik server is working'
+ print '\n'
+
+ if initResult.outGoingRZ == True:
+ print 'Outgoing call from RZ is working'
+ elif initResult.outGoingRZ == False:
+ print 'Outgoing call from RZ is not working'
+
+ if initResult.incomingRZ == True:
+ print 'incoming call from outside RZ to GSM RZ is working'
+ elif initResult.incomingRZ == False:
+ print 'incoming call from outside RZ to GSM RZ is not working'
+ print '\n'
+
+def doSipTest():
+
+ #destList = ['gsmr1','gsmr2', 'gsmr3', 'landline', 'unisip', 'GSMExt.O2', 'GSMExt.Voda', 'GSMExt.Eplus', 'GSMExt.Tm' ]
+ destList = ['landline', 'unisip']
+ print "test"
+ doTest = initTestClass.doTest()
+ print 'iam here'
+ for callTo in destList:
+
+ callFrom = 'sip'
+ doTest.initTest(callFrom,callTo)
+ resultsList.append([callFrom, callTo, doTest.result])
+
+def doIncomingTest(): #incoming call to RZ network
+
+ destList = ['GSMRZ1','unisip', 'GSMRZ2','GSMRZ3']
+ doTest = initTestClass.doTest()
+ for callTo in destList:
+
+ callFrom = 'landline'
+ doTest.initTest(callFrom,callTo)
+ resultsList.append([callFrom, callTo, doTest.result])
+ initTrueTable(resultsList)
+
+def doGsmrzTest():
+
+ destList = ['GSMRZ1','GSMRZ2', 'GSMRZ3']
+ callList = ['sip']
+ doTest = initTestClass.doTest()
+
+ for callFrom in callList:
+
+ for callTo in destList:
+ doTest.initTest(callFrom,callTo)
+ resultsList.append([callFrom, callTo, doTest.result])
+ initTrueTable(resultsList)
+
+def doGsmExtTest():
+
+ destList = ['GSMExt.O2', 'GSMExt.Voda', 'GSMExt.Eplus', 'GSMExt.Tm']
+ callList = ['sip']
+
+ doTest = initTestClass.doTest()
+
+ for callFrom in callList:
+ for callTo in destList:
+ doTest.initTest(callFrom,callTo)
+ resultsList.append([callFrom, callTo, doTest.result])
+ initTrueTable(resultsList)
+
+def doAllTest():
+
+ doSipTest()
+ doIncomingTest()
+ doGsmrzTest()
+ doGsmExtTest()
+
+def regularTest():
+ regulartest = initTestClass.doTest()
+ regulartest.smartTest()
+ initTrueTable(regulartest.smartResultList)
+
+def sendResultWebsite(message):
+ if server.sendData(message+ chr(10)) == 1:
+ print 'data sent successfully'
+ test = server.receiveData(2)
+ if test == 'TIMEOUT':
+ closeFunction(db,server)
+
+ if test == 'CONTINUE':
+ print 'continue test'
+
+def sendFinishMessage():
+ if server.connected == 1:
+ server.sendData('TEST DONE\n')
+ test = server.receiveData(2)
+ if test == 'TIMEOUT':
+ closeFunction(db,server)
+ if test == 'DISCONNECT':
+ close = server.closeConnection()
+ if close == 1:
+ print 'Closed connection successfully'
+
+ print 'release mutex says ', db.releaseMutex()
+
+def withDB(x):
+
+ initDB()
+ resultsList = list()
+ if dbStatus == 1: # Checking connection to database
+ if db.anyTasksToDo() == 1: # Checking task on the table
+
+ allPing()
+ i=0
+ makeTest = initTestClass.doTest()
+
+ for item in db.tasksList:
+
+ taskID = item[0]
+ taskNo = item[1]
+ callFrom = item[2]
+ callTo = item[3]
+
+ if i == 0:
+ db.updatePingResult(taskNo, sipServer, sipGate, unisip, gsmBox1, gsmBox2)
+ print '\n'
+ print 'Task ID :', taskID
+ print 'Calling From :', callFrom
+ print 'To :', callTo
+
+
+ makeTest.initTest(callFrom,callTo)
+
+ db.addResult(taskID, makeTest.result)
+
+ resultsList.append([callFrom, callTo, makeTest.result])
+
+ db.errorCode(makeTest.result)
+ print 'Result : ' +makeTest.result+ ' ' +db.errCode
+
+ if x == True: # if x = True means that this function call by website
+
+ message = '|' + str(callFrom) + '|' + str(callTo) + '|' + str(makeTest.result) + '|' + str(db.errCode)
+ sendResultWebsite(message) # send result to website
+
+ db.deleteTempTask(taskID)
+ i = i+1
+
+ db.cleanTasksList()
+
+ if x == True:
+ sendFinishMessage() #send finish message to website and close the connection
+
+ print '\n'
+
+ initTrueTable(resultsList) # fetch result list and make adjustment about the result
+ db.closeDBConn()
+ else:
+ print "--- No job at all ---"
+ db.closeDBConn()
+ else:
+ print 'Cant connect to database'
+ sys.exit(1)
+
+def findPort(portName): # take information in existing usb port
+ global connect
+ global prefix
+ global num
+ global IMEI
+ global portClass
+ sleep(0.5)
+ portLog = os.popen('dmesg | grep \'pl2303 converter now attached to '+portName+'\'').read()
+ sleep(0.5)
+ if portLog != '':
+ connect = 1
+ portClass = usbDetectClass.serialPort(portName)
+ portClass.findNumber()
+ portClass.findIMEI()
+ IMEI = portClass.IMEI
+ num = portClass.number
+ number = portClass.number
+ prefix = number[0:4]
+ else:
+ connect = 0
+
+def initDevice(deviceName):
+ print 'Device Name :',deviceName
+ print ' Device IMEI : ',
+ imei = sys.stdin.readline().rstrip("\r\n")
+ print 'Phone number : ',
+ number = sys.stdin.readline().rstrip("\r\n")
+ print 'Port Name : /dev/',
+ portName = sys.stdin.readline().rstrip("\r\n")
+ print ''
+
+ if imei == '' or portName == '':
+ print ' == cant save device configuration, please fill IMEI / port name of the device =='
+ else:
+ findPort(portName)
+ if connect == 1:
+ if str(IMEI) != str(imei) and str(num) != str(number):
+ print '== error, device not found =='
+ elif str(IMEI) == str(imei):
+ portClass.initUpdate(deviceName, portName, number)
+ print '== Device succeced added =='
+ elif str(num) == str(number) and str(IMEI) != str(imei):
+ portClass.initUpdate(deviceName, portName, number)
+ print '== Device succeced added, but have different IMEI =='
+ else:
+ print '== error, no device connected =='
+
+def autoUpdateDevice():
+ i = 0
+ x = 0
+ while i !=10:
+ portName ='ttyUSB'+str(i) #checking usb connection
+ findPort(portName)
+ i=i+1
+ if connect == 1:
+ for listNum in GSMListPrefix:
+ if prefix == listNum[1]:
+ print 'Device Name :',listNum[0]
+ print 'IMEI :',IMEI
+ print 'Phone Number :',num
+ print 'Port Name : /dev/'+portName
+ x=x+1
+ newPortName = '/dev/'+portName
+ portClass.initUpdate(listNum[0], newPortName, num)
+ print '\n'
+
+ print '== FINISH =='
+ print 'Found '+str(x)+' devices'
+
+def updateDevice(): #update port name list of device on DB
+ quit = False
+ while quit != True:
+ print ''
+ print "Mobile device configuration"
+ print "Menu: a = automatic device configuration, m = Manual configuration, q = quit : ",
+ input = sys.stdin.readline().rstrip("\r\n")
+ print ''
+ if input == 'm': # manual configuration
+
+ while True:
+ print ''
+ print "Mobile device name: "
+ print " 1. GSM O2"
+ print " 2. GSM Vodafone"
+ print " 3. GSM Eplus"
+ print " 4. GSM T-Mobile"
+ print " 5. GSM RZ 1"
+ print " 6. Back to menu"
+ print ""
+ print "your choise : ",
+ input = sys.stdin.readline().rstrip("\r\n")
+
+ if input == '8':
+ break
+ elif input == '1':
+ initDevice('GSMExt.O2')
+ elif input == '2':
+ initDevice('GSMExt.Voda')
+ elif input == '3':
+ initDevice('GSMExt.Eplus')
+ elif input == '4':
+ initDevice('GSMExt.Tm')
+ elif input == '5':
+ initDevice('GSMRZ1')
+ else:
+ print 'please choose between 1-6'
+
+ if input == 'a': #automatic configuration
+ autoUpdateDevice()
+
+ if input == "q":
+ break
+ sys.exit()
+
+def closeFunction(dbConn,serverSocket):
+ print 'Release the mutex: ' + str(dbConn.releaseMutex())
+ print 'Close the DB Connection: ' + str(dbConn.closeDBConn())
+ del dbConn
+ del serverSocket
+ sys.exit()
+
+if len(sys.argv) > 1:
+
+ command = sys.argv[1]
+ print ' '
+
+ if command == '--all':
+ resultsList = list()
+ doAllTest()
+
+ elif command == '--sip':
+ resultsList = list()
+ doSipTest()
+
+ elif command == '--gsmrz':
+ resultsList = list()
+ doGsmrzTest()
+
+ elif command == '--gsmext':
+ resultsList = list()
+ doGsmExtTest()
+
+ elif command == '--incoming':
+ resultsList = list()
+ doIncomingTest()
+
+ elif command == '--smart':
+ resultsList = list()
+ regularTest()
+
+ elif command == '--devconf':
+ updateDevice()
+
+ elif command == '--db':
+ resultsList = list()
+ withDB(False)
+
+ elif command == '--help':
+ file = open('help.txt', 'r')
+ print file.read()
+
+ else:
+ print "command not found, Type '--help', '--credits' for more information."
+ print '\n'
+else:
+ global server
+ global tried
+
+ initDB() # should put db condition
+ server = ServerClassSoftware.ServerHandlerSoftware(34500) #define the port
+ tried = server.openSocket(10)
+
+ if tried == 'TIMEOUT':
+ closeFunction(db,server)
+
+ test = server.receiveData(10)
+ if test == 'TIMEOUT':
+ closeFunction(db,server)
+
+ if test == 'START TEST':
+ server.sendData('CONFIRM\n')
+ print 'TEST STARTED'
+ withDB(True)
+
+ if test == 'SMART TEST':
+ server.sendData('CONFIRM\n')
+ print 'SMART TEST STARTED'
+ resultsList = list()
+ regularTest()
+
+ if test == 'UPDATE DEVICE':
+ server.sendData('CONFIRM\n')
+ print 'UPDATE DEVICE STARTED'
+ autoUpdateDevice()
+ else:
+ sys.exit('WE DIDN\'T RECEIVE THE CONFIRMATION')
+
+del server
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/For Weekly Test/tricode/gsmselftest.py b/For Weekly Test/tricode/gsmselftest.py
new file mode 100755
index 0000000..3e82b27
--- /dev/null
+++ b/For Weekly Test/tricode/gsmselftest.py
@@ -0,0 +1,783 @@
+#! /usr/bin/env python
+import sys
+import ControllerClass
+import DbClass
+import PingClass
+from time import sleep
+
+global resultsList
+resultsList = list()
+
+def ping(handler):
+
+ global serverStatus
+
+ if handler == 'landline':
+ server = PingClass.Ping('sipgate.de')
+ serverStatus = server.ping(1)
+
+ elif handler == 'sip':
+ server = PingClass.Ping('132.230.4.8')
+ serverStatus = server.ping(1)
+
+ elif handler == 'unisip':
+ server = PingClass.Ping('132.230.252.228')
+ serverStatus = server.ping(1)
+
+ elif handler == 'GSMRZ3':
+ server = PingClass.Ping('localhost')
+ serverStatus = server.ping(1)
+
+ elif handler == 'GSMRZ2':
+ server = PingClass.Ping('10.4.58.241')
+ serverStatus = server.ping(1)
+ else:
+ serverStatus = 1
+
+def allPing():
+
+ global sipGate
+ global sipServer
+ global unisip
+ global gsmBox1
+ global gsmBox2
+
+ server = PingClass.Ping('sipgate.de')
+ sipGate = server.ping(1)
+
+ server = PingClass.Ping('132.230.4.8')
+ sipServer = server.ping(1)
+
+ server = PingClass.Ping('132.230.252.228')
+ unisip = server.ping(1)
+
+ server = PingClass.Ping('localhost')
+ gsmBox1 = server.ping(1)
+
+ server = PingClass.Ping('10.4.58.241')
+ gsmBox2 = server.ping(1)
+
+def initDB():
+ global dbStatus
+ global db
+
+ db = DbClass.DBMySQLConnection('root', 'randompasswordSQL', 'localhost', 'gsmselftesting')
+ db.connectDB()
+ dbStatus = db.connectDB()
+
+def initTest(callFrom,callTo):
+ global dest
+ global caller
+ global callAdd
+ global accCaller
+ global recAdd
+ global destNo
+ global accDest
+ global result
+ global repeatTest
+
+ initDB()
+
+ if dbStatus != 0:
+
+ dest = db.deviceAddress(str(callTo))
+
+ caller = db.deviceAddress(str(callFrom))
+
+ callAdd = caller[0]
+ accCaller = caller[2]+':'+caller[3]+':'+caller[4]+':'
+
+ destAdd = dest[0]
+ destNo = dest[1]
+ accDest = dest[2]+':'+dest[3]+':'+dest[4]+':'
+
+ makeTest = ControllerClass.doTheTest(callFrom, callAdd, accCaller, callTo, destAdd, destNo, accDest)
+ makeTest.FuncTest()
+
+ result = str(makeTest.testResult)
+
+ else:
+ print "No connection to Database"
+
+ return result
+
+def initTrueTable():
+ nanoBTS1 = None
+ nanoBTS2 = None
+ nanoBTS3 = None
+ o2Card = None
+ eplusCard = None
+ vodaCard = None
+ tmobileCard = None
+ outgoingLandline = None
+ asteriskServer = None
+
+ for x in resultsList:
+
+ destination = x[1]
+ result = x[2]
+ caller = x[0]
+
+ if destination == 'GSMRZ1':
+ if result =='486':
+ nanoBTS1 = False
+ for y in resultsList:
+ call = y[0]
+ destination = y[1]
+ result = y[2]
+ if call == 'GSMRZ1':
+ if result == '200':
+ nanoBTS1 = True
+
+ if destination == 'GSMRZ1':
+ if result == '200':
+ nanoBTS1 = True
+ elif result =='200':
+ nanoBTS1 = True
+
+ elif destination == 'GSMRZ2':
+ if result =='486':
+ nanoBTS2 = False
+ for y in resultsList:
+ call = y[0]
+ destination = y[1]
+ result = y[2]
+ if call == 'GSMRZ2':
+ if result == '200':
+ nanoBTS2 = True
+
+ if destination == 'GSMRZ2':
+ if result == '200':
+ nanoBTS2 = True
+ elif result =='200':
+ nanoBTS2 = True
+
+ elif destination == 'GSMRZ3':
+ if result =='486':
+ nanoBTS3 = False
+ for y in resultsList:
+ call = y[0]
+ destination = y[1]
+ result = y[2]
+ if call == 'GSMRZ3':
+ if result == '200':
+ nanoBTS3 = True
+
+ if destination == 'GSMRZ2':
+ if result == '200':
+ nanoBTS3 = True
+ elif result =='200':
+ nanoBTS3 = True
+
+ elif destination == 'GSMExt.O2':
+ if result =='486':
+ o2Card = False
+ for y in resultsList:
+ call = y[0]
+ destination = y[1]
+ result = y[2]
+ if call == 'GSMExt.O2':
+ if result == '200':
+ o2Card = True
+
+ if destination == 'GSMExt.O2':
+ if result == '200':
+ o2Card = True
+ elif result =='200':
+ o2Card = True
+
+ elif destination == 'GSMExt.Voda':
+ if result =='486':
+ vodaCard = False
+ for y in resultsList:
+ call = y[0]
+ destination = y[1]
+ result = y[2]
+ if call == 'GSMExt.Voda':
+ if result == '200':
+ vodaCard = True
+
+ if destination == 'GSMExt.Voda':
+ if result == '200':
+ vodaCard = True
+ elif result =='200':
+ vodaCard = True
+
+ elif destination == 'GSMExt.Eplus':
+ if result =='486':
+ eplusCard = False
+ for y in resultsList:
+ call = y[0]
+ destination = y[1]
+ result = y[2]
+ if call == 'GSMExt.Eplus':
+ if result == '200':
+ eplusCard = True
+
+ if destination == 'GSMExt.Eplus':
+ if result == '200':
+ eplusCard = True
+ elif result =='200':
+ eplusCard = True
+
+ elif destination == 'GSMExt.Tm':
+ if result =='486':
+ tmobileCard = False
+ for y in resultsList:
+ call = y[0]
+ destination = y[1]
+ result = y[2]
+ if call == 'GSMExt.Tm':
+ if result == '200':
+ tmobileCard = True
+
+ if destination == 'GSMExt.Tm':
+ if result == '200':
+ tmobileCard = True
+ elif result =='200':
+ tmobileCard = True
+
+ elif destination == 'sip':
+ if result =='486':
+ asteriskServer = False
+ for y in resultsList:
+ call = y[0]
+ destination = y[1]
+ result = y[2]
+ if call == 'sip':
+ if result == '200':
+ asteriskServer = True
+
+ if destination == 'sip':
+ if result == '200':
+ asteriskServer = True
+
+ elif result =='200':
+ asteriskServer = True
+
+ if caller == 'GSMRZ1' or caller == 'GSMRZ2' or caller == 'GSMRZ3':
+
+ if destination == 'landline':
+ if result =='486':
+ outgoingLandline = False
+ for y in resultsList:
+ call = y[0]
+ destination = y[1]
+ result = y[2]
+ if caller == 'GSMRZ1' or caller == 'GSMRZ2' or caller == 'GSMRZ3':
+ if destination == 'landline':
+ if result == '200':
+ outgoingLandline = True
+
+ print '\n'
+ if o2Card == False and eplusCard == False and vodaCard == False and tmobileCard == False:
+ print 'GSM BOX Modem down'
+ else:
+ if o2Card == False:
+ print "O2 card indicate having problem"
+ if eplusCard == False:
+ print "eplus card indicate having problem"
+ if vodaCard == False:
+ print "vodaphone card indicate having problem"
+ if tmobileCard == False:
+ print "T-Mobile card indicate having problem"
+ print '\n'
+
+ if nanoBTS1 == False and nanoBTS2 == False and nanoBTS3 == False:
+ print 'openBSC down'
+ else:
+ if nanoBTS1 == False:
+ print "nanoBTS 1 indicate having problem"
+ if nanoBTS2 == False:
+ print "nanoBTS 2 indicate having problem"
+ if nanoBTS3 == False:
+ print "nanoBTS 3 indicate having problem"
+
+ if outgoingLandline == False:
+ print 'outgoing from GSM RZ to landline having problem'
+ print '\n'
+
+ if asteriskServer == False:
+ print "Asterisk server indicate having problem"
+ elif asteriskServer == True:
+ print 'Asterisk server working good'
+ print '\n'
+
+
+def doTest(callFrom,callTo):
+ ping(callFrom)
+
+ if serverStatus <> 0:
+
+ ping(callTo)
+ if serverStatus <> 0:
+ print 'Call From : ', callFrom
+ print 'Call Destination : ', callTo
+ initTest(callFrom,callTo)
+ resultsList.append([callFrom, callTo, result])
+ db.errorCode(result)
+ print 'Result : ' +result+ ' ' +db.errCode
+ sleep(5)
+ else:
+ print '[failed] 500 '+callTo+ ' Server Internal Error'
+ else:
+ print '[failed] 500 '+callFrom+ ' Server Internal Error'
+
+def doSipTest():
+
+ print '--SIP Part Test--'
+ destList = ['gsmr1','gsmr2', 'gsmr3', 'landline', 'unisip', 'GSMExt.O2', 'GSMExt.Voda', 'GSMExt.Eplus', 'GSMExt.Tm' ]
+ for callTo in destList:
+
+ callFrom = 'sip'
+ doTest(callFrom, callTo)
+
+def doLandlineTest():
+
+ print '--Landline Part Test--'
+ destList = ['GSMRZ1','unisip', 'sip']
+
+ for callTo in destList:
+
+ callFrom = 'landline'
+ doTest(callFrom, callTo)
+
+def doGsmrzTest():
+
+ print '--GSM Part Test--'
+ destList = ['GSMRZ1','GSMRZ2', 'GSMRZ3']
+ callList = ['sip']
+
+ for callFrom in callList:
+
+ for callTo in destList:
+ doTest(callFrom, callTo)
+ resultsList.append([callFrom, callTo, result])
+ initTrueTable()
+
+def doGsmExtTest():
+
+ destList = ['GSMExt.O2', 'GSMExt.Voda', 'GSMExt.Eplus', 'GSMExt.Tm']
+ callList = ['sip']
+
+ for callFrom in callList:
+ for callTo in destList:
+ doTest(callFrom, callTo)
+ resultsList.append([callFrom, callTo, result])
+ initTrueTable()
+
+def doAllTest():
+
+ doSipTest()
+ doLandlineTest()
+ doGsmrzTest()
+ doGsmExtTest()
+
+def smartTest():
+ ping('sip')
+ if serverStatus == 0:
+ print "Dont have connection to SIP Asterisk server, can't make a test"
+ sys.exit(1)
+
+ callerList = ['sip']
+ destinationList = ['SIP', 'GSMExt']
+ #destinationList = ['GSMExt', 'GSMRZ', 'SIP', 'RZOutgoing', 'RZincoming']
+ for callFrom in callerList:
+ for destination in destinationList:
+
+ if destination == 'GSMRZ':
+ print "make a call to GSMRZ1"
+ initTest(callFrom,'GSMRZ1')
+
+ if result == '200':
+ print "make a call to GSMRZ2"
+ initTest(callFrom,'GSMRZ2')
+
+ if result == '200':
+ print "make a call to GSMRZ3"
+ initTest(callFrom,'GSMRZ3')
+
+ if result == '200':
+ print "all network on GSMRZ are working"
+ elif result == '486':
+ print "BTS 3 Down"
+ else:
+ print "incomplete test, Handler having error, please do one more test"
+
+ elif result == '486':
+ print "make a call to GSMRZ3"
+ initTest(callFrom,'GSMRZ3')
+
+ if result == '200':
+ print "BTS 2 Down"
+ elif result == '486':
+ print "BTS 2 and 3 indicate having problem"
+ else:
+ print "incomplete test, Handler having error, please do one more test"
+ else:
+ print "incomplete test, Handler having error, please do one more test"
+
+ elif result == '486':
+ print "make a call to GSMRZ2"
+ initTest(callFrom,'GSMRZ2')
+
+ if result == '200':
+ print "make a call to GSMRZ3"
+ initTest(callFrom,'GSMRZ3')
+
+ if result == '200':
+ print "BTS 1 Down"
+ elif result == '486':
+ print "BTS 1 & 3 indicate having problem"
+ else:
+ print "incomplete test, Handler having error, please do one more test"
+
+ elif result == '486':
+ print "make a call to GSMRZ3"
+
+ if result == '200':
+ print "BTS 1 & 2 indicate having problem"
+ elif result == '486':
+ print "OpenBSc Down"
+ else:
+ print "incomplete test, Handler having error, please do one more test"
+ else:
+ print "incomplete test, Handler having error, please do one more test"
+ else:
+ print "incomplete test, Handler having error, please do one more test"
+
+
+ elif destination == 'GSMExt':
+
+ initTest(callFrom,'GSMExt.O2')
+ if result == '200':
+
+ initTest(callFrom,'GSMExt.Voda')
+ if result == '200':
+
+ initTest(callFrom,'GSMExt.Eplus')
+ if result == '200':
+
+ initTest(callFrom,'GSMExt.Tm')
+ if result == '200':
+ print "All network on GSM external are working"
+ elif result == '486':
+ print "T-Mobile card indicate having problem"
+ else:
+ print "incomplete test, Handler having error, please do one more test"
+
+ elif result == '486':
+
+ initTest(callFrom,'GSMExt.Tm')
+ if result == '200':
+ print "E-Plus card indicate having problem"
+ elif result == '486':
+ print "T-Mobile and E-Plus card indicate having problem"
+ else:
+ print "incomplete test, Handler having error, please do one more test"
+
+ elif result == '486':
+
+ initTest(callFrom,'GSMExt.Eplus')
+ if result == '200':
+
+ initTest(callFrom,'GSMExt.Tm')
+ if result == '200':
+ print "Vodaphone card indicate having problem"
+ elif result == '486':
+ print "T-Mobile and Vodaphone cards indicate having problem"
+ else:
+ print "incomplete test, Handler having error, please do one more test"
+
+ elif result == '486':
+
+ initTest(callFrom,'GSMExt.Tm')
+ if result == '200':
+ print "Vodaphone and E-Plus card indicate having problem"
+ elif result == '486':
+ print "T-Mobile, E-Plus and Vodaphone cards indicate having problem"
+ else:
+ print "incomplete test, Handler having error, please do one more test"
+ else:
+ print "Incomplete test, Handler having error, please do one more test"
+
+ elif result == '486':
+
+ initTest(callFrom,'GSMExt.Voda')
+ if result == '200':
+
+ initTest(callFrom,'GSMExt.Eplus')
+ if result == '200':
+
+ initTest(callFrom,'GSMExt.Tm')
+ if result == '200':
+ print "O2 card indicate having problem"
+ elif result == '486':
+ print "T-Mobile and O2 cards indicate having problem"
+ else:
+ print "incomplete test, Handler having error, please do one more test"
+
+ elif result == '486':
+
+ initTest(callFrom,'GSMExt.Tm')
+ if result == '200':
+ print "O2 and E-Plus cards indicate having problem"
+ elif result == '486':
+ print "T-Mobile, E-Plus and O2 cards indicate having problem"
+ else:
+ print "incomplete test, Handler having error, please do one more test"
+ else:
+ print "incomplete test, Handler having error, please do one more test"
+
+ elif result == '486':
+
+ initTest(callFrom,'GSMExt.Eplus')
+ if result == '200':
+
+ initTest(callFrom,'GSMExt.Tm')
+ if result == '200':
+ print "O2 and Vodaphone cards indicate having problem"
+ elif result == '486':
+ print "T-Mobile, O2 and Vodaphone cards indicate having problem"
+ else:
+ print "incomplete test, Handler having error, please do one more test"
+
+ elif result == '486':
+
+ initTest(callFrom,'GSMExt.Tm')
+ if result == '200':
+ print "O2, E-Plus and Vodaphone cards indicate having problem"
+ elif result == '486':
+ print "GSM External Modem Down"
+ else:
+ print "incomplete test, Handler having error, please do one more test"
+ else:
+ print "incomplete test, Handler having error, please do one more test"
+ else:
+ print "incomplete test, Handler having error, please do one more test"
+ else:
+ print "incomplete test, Handler having error, please do one more test"
+
+ elif destination == 'SIP':
+
+ ping('landline')
+ if serverStatus <> 0:
+ initTest(callFrom,'landline')
+
+ if result == '200':
+ ping('unisip')
+ if serverStatus <> 0:
+ initTest(callFrom,'unisip')
+
+ if result =='200':
+ print "All SIP network are working"
+ elif result == '486':
+ print "University telephone network indicate having problem"
+ else:
+ print "incomplete test, Handler having error, please do one more test"
+ else:
+ print "No connection to University telephone network server, check your connection"
+
+ elif result == '486':
+ ping('unisip')
+ if serverStatus <> 0:
+ initTest(callFrom,'unisip')
+
+ if result == '200':
+ print "Landline indicate having problem"
+ elif result == '486':
+ print "SIP Network Down"
+ else:
+ print "incomplete test, Handler having error, please do one more test"
+ else:
+ print "No connection to University telephone network server, check your connection"
+ else:
+ print "incomplete test, Handler having error, please do one more test"
+ else:
+ print "No connection to SIP Gate server, check your connection"
+
+ elif destination == 'RZOutgoing':
+
+ ping('landline')
+ if serverStatus <> 0:
+ initTest('GSMRZ1','landline')
+
+ if result == '200':
+ ping('unisip')
+ if serverStatus <> 0:
+ initTest('GSMRZ1','unisip')
+
+ if result =='200':
+ print "Outgoing call from GSM RZ is working"
+
+ elif result == '486':
+ print "Outgoing call from GSM RZ to UTN indicate having problem"
+ else:
+ print "incomplete test, Handler having error, please do one more test"
+ else:
+ print "No connection to University telephone network server, check your connection"
+
+ elif result == '486':
+ ping('unisip')
+ if serverStatus <> 0:
+ initTest('GSMRZ1','unisip')
+
+ if result == '200':
+ print "Outgoing call from GSM RZ to Landline indicate having problem"
+
+ elif result == '486':
+ print "Outgoing call from GSM RZ to Landline and UTN indicate having problem"
+ else:
+ print "incomplete test, Handler having error, please do one more test"
+ else:
+ print "No connection to University telephone network server, check your connection"
+ else:
+ print "incomplete test, Handler having error, please do one more test"
+ else:
+ print "No connection to SIP Gate server, check your connection"
+
+ elif destination == 'RZincoming':
+
+ ping('landline')
+ if serverStatus <> 0:
+ initTest('landline', 'GSMRZ1')
+
+ if result == '486':
+
+ initTest('GSMExt.O2','GSMRZ1')
+
+ if result =='200':
+ print "incoming call to GSM RZ working"
+
+ elif result == '486':
+
+ initTest('GSMExt.Voda','GSMRZ1')
+ if result =='200':
+ print "incoming call to GSM RZ working"
+ elif result == '486':
+ print "incoming call to GSM RZ notworking"
+ else:
+ print "incomplete test, GSM Handler having error, please do one more test"
+ else:
+ print "incomplete test, Handler having error, please do one more test"
+
+ elif result == '200':
+ print "incoming call to GSM RZ working"
+ else:
+ print "No connection to SIP Gate server, check your connection"
+
+
+if len(sys.argv) > 1:
+
+ command = sys.argv[1]
+ print ' '
+
+ if command == '--all':
+ doAllTest()
+
+ elif command == '--sip':
+ doSipTest()
+
+ elif command == '--gsmrz':
+ doGsmrzTest()
+
+ elif command == '--gsmext':
+ doGsmExtTest()
+
+ elif command == '--landline':
+ doLandlineTest()
+
+ elif command == '--smart':
+ smartTest()
+
+ elif command == '--help':
+ file = open('help.txt', 'r')
+ print file.read()
+
+ else:
+ print "command not found, Type '--help', '--credits' for more information."
+ print '\n'
+else:
+
+ initDB()
+ if dbStatus == 1:
+
+ if db.anyTasksToDo() == 1:
+
+ #allPing()
+ i=0
+ for item in db.tasksList:
+
+ taskID = item[0]
+ taskNo = item[1]
+ callFrom = item[2]
+ callTo = item[3]
+
+ #if i == 0:
+ #db.updatePingResult(taskNo, sipServer, sipGate, unisip, gsmBox1, gsmBox2)
+ print '\n'
+ print 'Task ID :', taskID
+ print 'Calling From :', callFrom
+ print 'To :', callTo
+
+ ping(callFrom)
+
+ if serverStatus <> 0:
+
+ ping(callTo)
+ if serverStatus <> 0:
+
+ initTest(callFrom,callTo)
+
+ db.addResult(taskID, result)
+
+ resultsList.append([callFrom, callTo, result])
+
+ db.errorCode(result)
+ print 'Result : ' +result+ ' ' +db.errCode
+
+ db.deleteTempTask(taskID)
+ i = i+1
+
+ sleep(5)
+
+ else:
+ db.addResult(taskID, '500')
+ print '[failed] 500 '+callTo+ ' Server Internal Error'
+ else:
+ db.addResult(taskID, '500')
+ print '[failed] 500 '+callFrom+' Server Internal Error'
+ db.cleanTasksList()
+
+ # fetch result list and make adjustment about the result
+ print '\n'
+ initTrueTable()
+ else:
+ print "--- No job at all ---"
+ else:
+ sys.exit(1)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/For Weekly Test/tricode/help.txt b/For Weekly Test/tricode/help.txt
new file mode 100755
index 0000000..96807ca
--- /dev/null
+++ b/For Weekly Test/tricode/help.txt
@@ -0,0 +1,17 @@
+
+
+Usage: python gsmselftest.py [option]
+
+Options and arguments (and corresponding environment variables):
+
+--db : To execute the test case given in the database
+--all : To execute all test case
+--sip : To execute ALL test case
+--gsmrz : To check whether GSM RZ network having problem or not
+--gsmext : To check whether GSM BOX modem having problem or not
+--incoming : To check incoming call from Landline
+--smart : To test only important point in the network and identify which part having problem.
+--devconf : To configuration USB device on the server
+
+ example : gsmselftest.py --devconf
+ gsmselftest.py --smart
diff --git a/For Weekly Test/tricode/icons/blackberry_dunno.png b/For Weekly Test/tricode/icons/blackberry_dunno.png
new file mode 100644
index 0000000..4ee9ee0
--- /dev/null
+++ b/For Weekly Test/tricode/icons/blackberry_dunno.png
Binary files differ
diff --git a/For Weekly Test/tricode/icons/blackberry_fail.png b/For Weekly Test/tricode/icons/blackberry_fail.png
new file mode 100644
index 0000000..650d942
--- /dev/null
+++ b/For Weekly Test/tricode/icons/blackberry_fail.png
Binary files differ
diff --git a/For Weekly Test/tricode/icons/blackberry_work.png b/For Weekly Test/tricode/icons/blackberry_work.png
new file mode 100644
index 0000000..3fe1d09
--- /dev/null
+++ b/For Weekly Test/tricode/icons/blackberry_work.png
Binary files differ
diff --git a/For Weekly Test/tricode/icons/box_dunno.png b/For Weekly Test/tricode/icons/box_dunno.png
new file mode 100644
index 0000000..744ec7a
--- /dev/null
+++ b/For Weekly Test/tricode/icons/box_dunno.png
Binary files differ
diff --git a/For Weekly Test/tricode/icons/box_fail.png b/For Weekly Test/tricode/icons/box_fail.png
new file mode 100644
index 0000000..3398e05
--- /dev/null
+++ b/For Weekly Test/tricode/icons/box_fail.png
Binary files differ
diff --git a/For Weekly Test/tricode/icons/box_work.png b/For Weekly Test/tricode/icons/box_work.png
new file mode 100644
index 0000000..666fced
--- /dev/null
+++ b/For Weekly Test/tricode/icons/box_work.png
Binary files differ
diff --git a/For Weekly Test/tricode/icons/server_dunno.png b/For Weekly Test/tricode/icons/server_dunno.png
new file mode 100644
index 0000000..588514e
--- /dev/null
+++ b/For Weekly Test/tricode/icons/server_dunno.png
Binary files differ
diff --git a/For Weekly Test/tricode/icons/server_fail.png b/For Weekly Test/tricode/icons/server_fail.png
new file mode 100644
index 0000000..a699864
--- /dev/null
+++ b/For Weekly Test/tricode/icons/server_fail.png
Binary files differ
diff --git a/For Weekly Test/tricode/icons/server_work.png b/For Weekly Test/tricode/icons/server_work.png
new file mode 100644
index 0000000..210979f
--- /dev/null
+++ b/For Weekly Test/tricode/icons/server_work.png
Binary files differ
diff --git a/For Weekly Test/tricode/icons/sip_dunno.png b/For Weekly Test/tricode/icons/sip_dunno.png
new file mode 100644
index 0000000..e494a61
--- /dev/null
+++ b/For Weekly Test/tricode/icons/sip_dunno.png
Binary files differ
diff --git a/For Weekly Test/tricode/icons/sip_fail.png b/For Weekly Test/tricode/icons/sip_fail.png
new file mode 100644
index 0000000..02d7029
--- /dev/null
+++ b/For Weekly Test/tricode/icons/sip_fail.png
Binary files differ
diff --git a/For Weekly Test/tricode/icons/sip_work.png b/For Weekly Test/tricode/icons/sip_work.png
new file mode 100644
index 0000000..5774487
--- /dev/null
+++ b/For Weekly Test/tricode/icons/sip_work.png
Binary files differ
diff --git a/For Weekly Test/tricode/icons/telephone_dunno.png b/For Weekly Test/tricode/icons/telephone_dunno.png
new file mode 100644
index 0000000..2ac9dd6
--- /dev/null
+++ b/For Weekly Test/tricode/icons/telephone_dunno.png
Binary files differ
diff --git a/For Weekly Test/tricode/icons/telephone_fail.png b/For Weekly Test/tricode/icons/telephone_fail.png
new file mode 100644
index 0000000..222050d
--- /dev/null
+++ b/For Weekly Test/tricode/icons/telephone_fail.png
Binary files differ
diff --git a/For Weekly Test/tricode/icons/telephone_work.png b/For Weekly Test/tricode/icons/telephone_work.png
new file mode 100644
index 0000000..5086dd2
--- /dev/null
+++ b/For Weekly Test/tricode/icons/telephone_work.png
Binary files differ
diff --git a/For Weekly Test/tricode/icons/uni-network_dunno.png b/For Weekly Test/tricode/icons/uni-network_dunno.png
new file mode 100644
index 0000000..7d99f0e
--- /dev/null
+++ b/For Weekly Test/tricode/icons/uni-network_dunno.png
Binary files differ
diff --git a/For Weekly Test/tricode/icons/uni-network_fail.png b/For Weekly Test/tricode/icons/uni-network_fail.png
new file mode 100644
index 0000000..3da0a70
--- /dev/null
+++ b/For Weekly Test/tricode/icons/uni-network_fail.png
Binary files differ
diff --git a/For Weekly Test/tricode/icons/uni-network_work.png b/For Weekly Test/tricode/icons/uni-network_work.png
new file mode 100644
index 0000000..fdc7989
--- /dev/null
+++ b/For Weekly Test/tricode/icons/uni-network_work.png
Binary files differ
diff --git a/For Weekly Test/tricode/initTestClass.py b/For Weekly Test/tricode/initTestClass.py
new file mode 100755
index 0000000..434d600
--- /dev/null
+++ b/For Weekly Test/tricode/initTestClass.py
@@ -0,0 +1,264 @@
+import sys
+import subprocess, signal
+import os
+import ControllerClass
+import DbClass
+import PingClass
+import random
+from time import sleep
+
+class doTest:
+
+ def pings(self,IP):
+
+ server = PingClass.Ping(IP)
+ self.serverStatus = server.ping(2)
+ return self.serverStatus
+
+ def initDB(self):
+
+ self.db = DbClass.DBMySQLConnection('root', 'randompasswordSQL', 'localhost', 'gsmselftesting')
+ self.db.connectDB()
+ self.dbStatus = self.db.connectDB()
+
+ def initaccount(self,account,handler):
+ if handler == 'sip' or handler == 'unisip' or handler == 'landline':
+ if account[1] != '' or account[2] != '' or account[3] != '' or account[4] != '': # checking available sip account, is there enough information about the account such as username, password,server
+ self.status = 1
+ else:
+ self.status = 0
+ else:
+ if account[0] != '' or account[1] != '':
+ self.status = 1
+ else:
+ self.status = 0
+
+
+#kill process to make sure, that the handler is Terminate incase handler having problem receiving
+# terminate message from controller
+
+ def killProc(self):
+ # define process name of the Handler
+ procNameDest = 'GSM Handler'
+ procNameCall = 'SIP Handler'
+
+ p = subprocess.Popen(['ps', '-A'], stdout=subprocess.PIPE)
+ out, err = p.communicate()
+
+ #search process name and kill it.
+ for line in out.splitlines():
+ if procNameDest in line:
+ pid = int(line.split(None, 1)[0])
+ os.kill(pid, signal.SIGKILL)
+ for line in out.splitlines():
+ if procNameCall in line:
+ pid = int(line.split(None, 1)[0])
+ os.kill(pid, signal.SIGKILL)
+
+ def initTest(self, callFrom, callTo):
+
+ self.initDB() # open database connection
+
+ if self.dbStatus != 0: # if connection to db establish, do the test
+
+ #fetch device account detail from database
+ dest = self.db.deviceAddress(str(callTo))
+ caller = self.db.deviceAddress(str(callFrom))
+ #self.pings(dest[4])
+
+ if self.pings(caller[4]) <> 0:
+ #self.pings(caller[4])
+
+ if self.pings(dest[4]) <> 0:
+
+ self.initaccount(caller,callFrom)
+ if self.status == 1:
+ self.initaccount(dest,callTo)
+ if self.status == 1:
+ callPortName = caller[0]
+ accCaller = caller[2]+':'+caller[3]+':'+caller[4]+':'
+
+ destPortName = dest[0]
+ destNo = dest[1]
+ accDest = dest[2]+':'+dest[3]+':'+dest[4]+':'
+
+ makeTest = ControllerClass.doTheTest(callFrom, callPortName, accCaller, callTo, destPortName, destNo, accDest)
+ makeTest.FuncTest()
+ self.result = str(makeTest.testResult)
+
+ print callFrom, callTo, makeTest.testResult
+ else:
+ self.result = 100
+ else:
+ self.result = 100
+ sleep(3)
+ self.killProc() # kill all the handler
+ self.db.closeDBConn() #close db connection
+ sleep(1)
+ else:
+ self.result = 500
+ else:
+ self.result = 500
+
+ else:
+ self.result = 333
+ self.db.closeDBConn()
+ return self.result
+
+ # function to search in the list
+ def isThere(self, keyword,lists):
+ x = 0
+ for item in lists:
+
+ if item == keyword:
+ return 1
+ else:
+ x = x+1
+
+ def smartTest(self):
+ self.initDB()
+ self.smartResultList = list()
+ deviceLists = self.db.deviceList()
+ gsmList = list()
+ gsmRZList = list()
+ sipList = list()
+ destList = list()
+ rem = list()
+ item = list()
+ cpgsmRZList = list()
+ self.db.closeDBConn()
+
+ for lists in deviceLists: #define category of the device
+ device = lists[0]
+ if device[0:5] == 'GSMRZ':
+ gsmRZList.append(device)
+ cpgsmRZList.append(device)
+ elif device[0:5] == 'GSMEx':
+ gsmList.append(device)
+ else:
+ sipList.append(device)
+
+ if device[0:5] == 'GSMRZ' or device[0:5] == 'GSMEx':
+ destList.append(device)
+
+ #first test from university telphone network to random GSM RZ avaliable
+ i = random.randint(0, len(gsmRZList)-1)
+ callTo = gsmRZList[i]
+ self.initTest('unisip',callTo)
+
+ gsmRZList.remove(callTo)
+ destList.remove(callTo)
+
+ self.smartResultList.append(['unisip', callTo, self.result, 1])
+
+
+ for callFrom in gsmRZList:
+ i = random.randint(0, len(destList)-1) #Check whether the caller and dest are same
+ callTo = destList[i]
+ if callFrom == callTo: #Check whether the caller and dest are same
+ if i == 0:
+ i = i+1 # if it in the first list, change to be the second list else, just back on step.
+ else:
+ i = i-1
+ callTo = destList[i]
+
+ self.initTest(callFrom,callTo)
+
+ destList.remove(callTo)
+ destList.remove(callFrom)
+ gsmRZList.remove(callFrom)
+ self.smartResultList.append([callFrom, callTo, self.result,1])
+
+ # test incoming call from outside rz network to gsm rz
+ i = random.randint(0, len(gsmRZList)-1) #
+ callTo = gsmRZList[i]
+ self.initTest('landline',callTo)
+
+
+ if self.isThere(callTo,destList) == 1: # Checking whether caller at gsmrz list in the destination list, if yes delete it.
+ destList.remove(callTo)
+ self.smartResultList.append(['landline', callTo, self.result,1])
+
+ # testing from random GSM RZ to sip
+ #i = random.randint(0, len(cpgsmRZList)-1) #
+ #callFrom = cpgsmRZList[i]
+ #self.initTest(callFrom, 'sip')
+
+ #self.smartResultList.append([callFrom, 'sip', self.result,1])
+
+ for callTo in destList:
+ callFrom = 'sip'
+ self.initTest(callFrom, callTo)
+ self.smartResultList.append([callFrom, callTo, self.result,1])
+
+ #checking unsuccess call, to make sure that destination are really unreachable
+ for dest in self.smartResultList:
+ #check unsuccess call and did the test have already tried, 2 means has been check
+ if int(dest[2]) == 486 and int(dest[3]) != 2 and dest[1] != 'sip' and dest[0] != 'sip':
+ testDestination = False
+ # make sure that destination have not tested by another part and give success result.
+ for test in self.smartResultList:
+ if test[1] == dest[1] and int(dest[2]) == 200:
+ testDestination = True
+ if testDestination == True:
+ self.initTest('sip', dest[1])
+ self.smartResultList.append(['sip', dest[1], self.result,2])
+ rem.append(dest)
+
+ #check unsuccess call because caller handler having problem
+ if int(dest[2]) == 999 and int(dest[3]) != 2 and dest[1] != 'sip' and dest[1] != 'sip':
+ testDestination = False
+ # make sure that destination have not tested by another part and give success result.
+ for test in self.smartResultList:
+ if test[1] == dest[1] and int(dest[2]) != 200:
+ testDestination = True
+ if testDestination == True:
+ self.initTest('sip', dest[1])
+ self.smartResultList.append(['sip', dest[1], self.result,2])
+ #rem.append(dest)
+
+ caller = dest[0] # to test nanobts if the test come from RZ GSM but fehler
+ if caller[0:5] == 'GSMRZ' and int(dest[3]) != 2 and dest[1] != 'sip':
+ if int(dest[2]) == 486:
+ self.initTest('sip', dest[1])
+ self.smartResultList.append(['sip', dest[1], self.result,2])
+ rem.append(dest)
+
+ # test to make sure nanoBTS working or not. sice probably that nanotbts seems error but actually not.
+ for RZ in cpgsmRZList:
+ repeat = False
+ for gsmrzResult in self.smartResultList:
+
+ if gsmrzResult[0] == RZ or gsmrzResult[1] == RZ:
+ if int(gsmrzResult[2]) == 486:
+ repeat = True
+ if gsmrzResult[1] == RZ and int(gsmrzResult[2]) == 998:
+ cpgsmRZList.remove(RZ)
+ if gsmrzResult[0] == RZ and int(gsmrzResult[2]) == 999:
+ cpgsmRZList.remove(RZ)
+
+ if len(cpgsmRZList) > 1:
+
+ if repeat == True:
+ i = random.randint(0, len(cpgsmRZList)-1) #
+ callTo = cpgsmRZList[i]
+ if i == 0:
+ x = i+1
+ else:
+ x = i-1
+ callFrom = cpgsmRZList[x]
+ self.initTest(callFrom, callTo)
+ self.smartResultList.append([callFrom, callTo, self.result,2])
+ item = '['+str(gsmrzResult[0])+','+str(gsmrzResult[1])+','+str(gsmrzResult[2])+','+str(1)+']'
+ rem.append(item)
+
+ for remov in rem:
+ for x in self.smartResultList:
+ if x == remov:
+ self.smartResultList.remove(x)
+
+ return self.smartResultList
+
+
+
+
diff --git a/For Weekly Test/tricode/initTestClass.pyc b/For Weekly Test/tricode/initTestClass.pyc
new file mode 100644
index 0000000..2b3fc7b
--- /dev/null
+++ b/For Weekly Test/tricode/initTestClass.pyc
Binary files differ
diff --git a/For Weekly Test/tricode/insertData.php b/For Weekly Test/tricode/insertData.php
new file mode 100644
index 0000000..fe77587
--- /dev/null
+++ b/For Weekly Test/tricode/insertData.php
@@ -0,0 +1,81 @@
+<?
+/*
+//Connection stuff
+//DB
+$dbhost = 'localhost';
+$dbuser = 'root';
+$dbpass = 'randompasswordSQL';
+
+
+$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die('Error connecting to mysql');
+
+$dbname = 'gsmselftesting';
+mysql_select_db($dbname);
+//End of connection stuff
+*/
+function getNewTaskNo()
+{
+ $sql = "SELECT MAX(taskNo) FROM TaskTable"; //the SQL command to find the max value in taskNo
+ $execute = mysql_query($sql); //execute the command
+ $result = mysql_result($execute,0);
+
+ if ($result == NULL)
+ {
+ // there is no single job in the table
+ return 1;
+ }
+ else
+ {
+ //increment the new taskNo
+ return $result + 1;
+ }
+}
+
+function insertTask($taskNo, $from, $to)
+{
+ $trans = "START TRANSACTION;";
+ $execute = mysql_query($trans);
+
+ if ($execute!=1)
+ {
+ return 3; //could not start transaction
+ }
+
+ $sql = "INSERT INTO `TaskTable` (`taskNo`, `from`, `to`) VALUES($taskNo, '$from', '$to')";
+ $execute = mysql_query($sql); //insert new task into the TaskTable
+
+ if ($execute == 1) //I added to the DB the task!
+ {
+ $sql = "SELECT @taskID := LAST_INSERT_ID()"; //find the last taskId
+ $execute = mysql_query($sql);
+ $taskId = mysql_result($execute,0); //I have the last taskId which I will use to insert it into TempTaskTable
+
+ $sql = "INSERT INTO `TempTaskTable` (`taskID`, `taskNo`, `from`, `to`) VALUES($taskId, $taskNo, '$from', '$to')";
+ $execute = mysql_query($sql); //insert new task into the TempTaskTable
+
+ if ($execute == 1)
+ {
+ $trans = "COMMIT;"; //command to end the transaction
+ $execute = mysql_query($trans);//finish the transaction
+
+ if ($execute == 1)
+ {
+ return 1; //task was successfuly added to both tables, TaskTable and TempTaskTable
+ }
+ else
+ {
+ return 0; //nothing was added to the tables
+ }
+ }
+ else
+ {
+ return 2; //the task is in the TaskTable but not in TempTaskTable
+ }
+ }
+ else
+ {
+ return 0; //nothing was added to the table, some error occured
+ }
+}
+ //include 'post.php';
+?>
diff --git a/For Weekly Test/tricode/loader.gif b/For Weekly Test/tricode/loader.gif
new file mode 100644
index 0000000..240d4e1
--- /dev/null
+++ b/For Weekly Test/tricode/loader.gif
Binary files differ
diff --git a/For Weekly Test/tricode/moocheck.js b/For Weekly Test/tricode/moocheck.js
new file mode 100644
index 0000000..0c364aa
--- /dev/null
+++ b/For Weekly Test/tricode/moocheck.js
@@ -0,0 +1,176 @@
+/*
+* FancyForm 0.95
+* By Vacuous Virtuoso, lipidity.com
+* ---
+* Checkbox and radio input replacement script.
+* Toggles defined class when input is selected.
+*/
+
+var FancyForm = {
+ start: function(elements, options){
+ if(FancyForm.initing != undefined) return;
+ if($type(elements)!='array') elements = $$('input');
+ if(!options) options = [];
+ FancyForm.onclasses = ($type(options['onClasses']) == 'object') ? options['onClasses'] : {
+ checkbox: 'checked',
+ radio: 'selected'
+ }
+ FancyForm.offclasses = ($type(options['offClasses']) == 'object') ? options['offClasses'] : {
+ checkbox: 'unchecked',
+ radio: 'unselected'
+ }
+ if($type(options['extraClasses']) == 'object'){
+ FancyForm.extra = options['extraClasses'];
+ } else if(options['extraClasses']){
+ FancyForm.extra = {
+ checkbox: 'f_checkbox',
+ radio: 'f_radio',
+ on: 'f_on',
+ off: 'f_off',
+ all: 'fancy'
+ }
+ } else {
+ FancyForm.extra = {};
+ }
+ FancyForm.onSelect = $pick(options['onSelect'], function(el){});
+ FancyForm.onDeselect = $pick(options['onDeselect'], function(el){});
+ FancyForm.chks = [];
+ FancyForm.add(elements);
+ $each($$('form'), function(x) {
+ x.addEvent('reset', function(a) {
+ window.setTimeout(function(){FancyForm.chks.each(function(x){FancyForm.update(x);x.inputElement.blur()})}, 200);
+ });
+ });
+ },
+ add: function(elements){
+ if($type(elements) == 'element')
+ elements = [elements];
+ FancyForm.initing = 1;
+ var keeps = [];
+ var newChks = elements.filter(function(chk){
+ if($type(chk) != 'element' || chk.inputElement || (chk.get('tag') == 'input' && chk.getParent().inputElement))
+ return false;
+ if(chk.get('tag') == 'input' && (FancyForm.onclasses[chk.getProperty('type')])){
+ var el = chk.getParent();
+ if(el.getElement('input')==chk){
+ el.type = chk.getProperty('type');
+ el.inputElement = chk;
+ this.push(el);
+ } else {
+ chk.addEvent('click',function(f){
+ if(f.event.stopPropagation) f.event.stopPropagation();
+ });
+ }
+ } else if((chk.inputElement = chk.getElement('input')) && (FancyForm.onclasses[(chk.type = chk.inputElement.getProperty('type'))])){
+ return true;
+ }
+ return false;
+ }.bind(keeps));
+ newChks = newChks.combine(keeps);
+ newChks.each(function(chk){
+ var c = chk.inputElement;
+ c.setStyle('position', 'absolute');
+ c.setStyle('left', '-9999px');
+ chk.addEvent('selectStart', function(f){f.stop()});
+ chk.name = c.getProperty('name');
+ FancyForm.update(chk);
+ });
+ newChks.each(function(chk){
+ var c = chk.inputElement;
+ chk.addEvent('click', function(f){
+ f.stop(); f.type = 'prop';
+ c.fireEvent('click', f, 1);
+ });
+ chk.addEvent('mousedown', function(f){
+ if($type(c.onmousedown) == 'function')
+ c.onmousedown();
+ f.preventDefault();
+ });
+ chk.addEvent('mouseup', function(f){
+ if($type(c.onmouseup) == 'function')
+ c.onmouseup();
+ });
+ c.addEvent('focus', function(f){
+ if(FancyForm.focus)
+ chk.setStyle('outline', '1px dotted');
+ });
+ c.addEvent('blur', function(f){
+ chk.setStyle('outline', 0);
+ });
+ c.addEvent('click', function(f){
+ if(f.event.stopPropagation) f.event.stopPropagation();
+ if(c.getProperty('disabled')) // c.getStyle('position') != 'absolute'
+ return;
+ if (!chk.hasClass(FancyForm.onclasses[chk.type]))
+ c.setProperty('checked', 'checked');
+ else if(chk.type != 'radio')
+ c.setProperty('checked', false);
+ if(f.type == 'prop')
+ FancyForm.focus = 0;
+ FancyForm.update(chk);
+ FancyForm.focus = 1;
+ if(f.type == 'prop' && !FancyForm.initing && $type(c.onclick) == 'function')
+ c.onclick();
+ });
+ c.addEvent('mouseup', function(f){
+ if(f.event.stopPropagation) f.event.stopPropagation();
+ });
+ c.addEvent('mousedown', function(f){
+ if(f.event.stopPropagation) f.event.stopPropagation();
+ });
+ if(extraclass = FancyForm.extra[chk.type])
+ chk.addClass(extraclass);
+ if(extraclass = FancyForm.extra['all'])
+ chk.addClass(extraclass);
+ });
+ FancyForm.chks.combine(newChks);
+ FancyForm.initing = 0;
+ },
+ update: function(chk){
+ if(chk.inputElement.getProperty('checked')) {
+ chk.removeClass(FancyForm.offclasses[chk.type]);
+ chk.addClass(FancyForm.onclasses[chk.type]);
+ if (chk.type == 'radio'){
+ FancyForm.chks.each(function(other){
+ if (other.name == chk.name && other != chk) {
+ other.inputElement.setProperty('checked', false);
+ FancyForm.update(other);
+ }
+ });
+ }
+ if(extraclass = FancyForm.extra['on'])
+ chk.addClass(extraclass);
+ if(extraclass = FancyForm.extra['off'])
+ chk.removeClass(extraclass);
+ if(!FancyForm.initing)
+ FancyForm.onSelect(chk);
+ } else {
+ chk.removeClass(FancyForm.onclasses[chk.type]);
+ chk.addClass(FancyForm.offclasses[chk.type]);
+ if(extraclass = FancyForm.extra['off'])
+ chk.addClass(extraclass);
+ if(extraclass = FancyForm.extra['on'])
+ chk.removeClass(extraclass);
+ if(!FancyForm.initing)
+ FancyForm.onDeselect(chk);
+ }
+ if(!FancyForm.initing)
+ chk.inputElement.focus();
+ },
+ all: function(){
+ FancyForm.chks.each(function(chk){
+ chk.inputElement.setProperty('checked', 'checked');
+ FancyForm.update(chk);
+ });
+ },
+ none: function(){
+ FancyForm.chks.each(function(chk){
+ chk.inputElement.setProperty('checked', false);
+ FancyForm.update(chk);
+ });
+ }
+};
+
+window.addEvent('domready', function(){
+ FancyForm.start();
+});
diff --git a/For Weekly Test/tricode/mootools.js b/For Weekly Test/tricode/mootools.js
new file mode 100644
index 0000000..45b1f3e
--- /dev/null
+++ b/For Weekly Test/tricode/mootools.js
@@ -0,0 +1,126 @@
+//MooTools, <http://mootools.net>, My Object Oriented (JavaScript) Tools. Copyright (c) 2006-2008 Valerio Proietti, <http://mad4milk.net>, MIT Style License.
+
+var MooTools={'version':'1.2.0','build':''};var Native=function(options){options=options||{};var afterImplement=options.afterImplement||function(){};var generics=options.generics;generics=(generics!==false);var legacy=options.legacy;var initialize=options.initialize;var protect=options.protect;var name=options.name;var object=initialize||legacy;object.constructor=Native;object.$family={name:'native'};if(legacy&&initialize)object.prototype=legacy.prototype;object.prototype.constructor=object;if(name){var family=name.toLowerCase();object.prototype.$family={name:family};Native.typize(object,family);}
+var add=function(obj,name,method,force){if(!protect||force||!obj.prototype[name])obj.prototype[name]=method;if(generics)Native.genericize(obj,name,protect);afterImplement.call(obj,name,method);return obj;};object.implement=function(a1,a2,a3){if(typeof a1=='string')return add(this,a1,a2,a3);for(var p in a1)add(this,p,a1[p],a2);return this;};object.alias=function(a1,a2,a3){if(typeof a1=='string'){a1=this.prototype[a1];if(a1)add(this,a2,a1,a3);}else{for(var a in a1)this.alias(a,a1[a],a2);}
+return this;};return object;};Native.implement=function(objects,properties){for(var i=0,l=objects.length;i<l;i++)objects[i].implement(properties);};Native.genericize=function(object,property,check){if((!check||!object[property])&&typeof object.prototype[property]=='function')object[property]=function(){var args=Array.prototype.slice.call(arguments);return object.prototype[property].apply(args.shift(),args);};};Native.typize=function(object,family){if(!object.type)object.type=function(item){return($type(item)===family);};};Native.alias=function(objects,a1,a2,a3){for(var i=0,j=objects.length;i<j;i++)objects[i].alias(a1,a2,a3);};(function(objects){for(var name in objects)Native.typize(objects[name],name);})({'boolean':Boolean,'native':Native,'object':Object});(function(objects){for(var name in objects)new Native({name:name,initialize:objects[name],protect:true});})({'String':String,'Function':Function,'Number':Number,'Array':Array,'RegExp':RegExp,'Date':Date});(function(object,methods){for(var i=methods.length;i--;i)Native.genericize(object,methods[i],true);return arguments.callee;})
+(Array,['pop','push','reverse','shift','sort','splice','unshift','concat','join','slice','toString','valueOf','indexOf','lastIndexOf'])
+(String,['charAt','charCodeAt','concat','indexOf','lastIndexOf','match','replace','search','slice','split','substr','substring','toLowerCase','toUpperCase','valueOf']);function $chk(obj){return!!(obj||obj===0);};function $clear(timer){clearTimeout(timer);clearInterval(timer);return null;};function $defined(obj){return(obj!=undefined);};function $empty(){};function $arguments(i){return function(){return arguments[i];};};function $lambda(value){return(typeof value=='function')?value:function(){return value;};};function $extend(original,extended){for(var key in(extended||{}))original[key]=extended[key];return original;};function $unlink(object){var unlinked;switch($type(object)){case'object':unlinked={};for(var p in object)unlinked[p]=$unlink(object[p]);break;case'hash':unlinked=$unlink(object.getClean());break;case'array':unlinked=[];for(var i=0,l=object.length;i<l;i++)unlinked[i]=$unlink(object[i]);break;default:return object;}
+return unlinked;};function $merge(){var mix={};for(var i=0,l=arguments.length;i<l;i++){var object=arguments[i];if($type(object)!='object')continue;for(var key in object){var op=object[key],mp=mix[key];mix[key]=(mp&&$type(op)=='object'&&$type(mp)=='object')?$merge(mp,op):$unlink(op);}}
+return mix;};function $pick(){for(var i=0,l=arguments.length;i<l;i++){if(arguments[i]!=undefined)return arguments[i];}
+return null;};function $random(min,max){return Math.floor(Math.random()*(max-min+1)+min);};function $splat(obj){var type=$type(obj);return(type)?((type!='array'&&type!='arguments')?[obj]:obj):[];};var $time=Date.now||function(){return new Date().getTime();};function $try(){for(var i=0,l=arguments.length;i<l;i++){try{return arguments[i]();}catch(e){}}
+return null;};function $type(obj){if(obj==undefined)return false;if(obj.$family)return(obj.$family.name=='number'&&!isFinite(obj))?false:obj.$family.name;if(obj.nodeName){switch(obj.nodeType){case 1:return'element';case 3:return(/\S/).test(obj.nodeValue)?'textnode':'whitespace';}}else if(typeof obj.length=='number'){if(obj.callee)return'arguments';else if(obj.item)return'collection';}
+return typeof obj;};var Hash=new Native({name:'Hash',initialize:function(object){if($type(object)=='hash')object=$unlink(object.getClean());for(var key in object)this[key]=object[key];return this;}});Hash.implement({getLength:function(){var length=0;for(var key in this){if(this.hasOwnProperty(key))length++;}
+return length;},forEach:function(fn,bind){for(var key in this){if(this.hasOwnProperty(key))fn.call(bind,this[key],key,this);}},getClean:function(){var clean={};for(var key in this){if(this.hasOwnProperty(key))clean[key]=this[key];}
+return clean;}});Hash.alias('forEach','each');function $H(object){return new Hash(object);};Array.implement({forEach:function(fn,bind){for(var i=0,l=this.length;i<l;i++)fn.call(bind,this[i],i,this);}});Array.alias('forEach','each');function $A(iterable){if(iterable.item){var array=[];for(var i=0,l=iterable.length;i<l;i++)array[i]=iterable[i];return array;}
+return Array.prototype.slice.call(iterable);};function $each(iterable,fn,bind){var type=$type(iterable);((type=='arguments'||type=='collection'||type=='array')?Array:Hash).each(iterable,fn,bind);};var Browser=new Hash({Engine:{name:'unknown',version:''},Platform:{name:(navigator.platform.match(/mac|win|linux/i)||['other'])[0].toLowerCase()},Features:{xpath:!!(document.evaluate),air:!!(window.runtime)},Plugins:{}});if(window.opera)Browser.Engine={name:'presto',version:(document.getElementsByClassName)?950:925};else if(window.ActiveXObject)Browser.Engine={name:'trident',version:(window.XMLHttpRequest)?5:4};else if(!navigator.taintEnabled)Browser.Engine={name:'webkit',version:(Browser.Features.xpath)?420:419};else if(document.getBoxObjectFor!=null)Browser.Engine={name:'gecko',version:(document.getElementsByClassName)?19:18};Browser.Engine[Browser.Engine.name]=Browser.Engine[Browser.Engine.name+Browser.Engine.version]=true;if(window.orientation!=undefined)Browser.Platform.name='ipod';Browser.Platform[Browser.Platform.name]=true;Browser.Request=function(){return $try(function(){return new XMLHttpRequest();},function(){return new ActiveXObject('MSXML2.XMLHTTP');});};Browser.Features.xhr=!!(Browser.Request());Browser.Plugins.Flash=(function(){var version=($try(function(){return navigator.plugins['Shockwave Flash'].description;},function(){return new ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version');})||'0 r0').match(/\d+/g);return{version:parseInt(version[0]||0+'.'+version[1]||0),build:parseInt(version[2]||0)};})();function $exec(text){if(!text)return text;if(window.execScript){window.execScript(text);}else{var script=document.createElement('script');script.setAttribute('type','text/javascript');script.text=text;document.head.appendChild(script);document.head.removeChild(script);}
+return text;};Native.UID=1;var $uid=(Browser.Engine.trident)?function(item){return(item.uid||(item.uid=[Native.UID++]))[0];}:function(item){return item.uid||(item.uid=Native.UID++);};var Window=new Native({name:'Window',legacy:(Browser.Engine.trident)?null:window.Window,initialize:function(win){$uid(win);if(!win.Element){win.Element=$empty;if(Browser.Engine.webkit)win.document.createElement("iframe");win.Element.prototype=(Browser.Engine.webkit)?window["[[DOMElement.prototype]]"]:{};}
+return $extend(win,Window.Prototype);},afterImplement:function(property,value){window[property]=Window.Prototype[property]=value;}});Window.Prototype={$family:{name:'window'}};new Window(window);var Document=new Native({name:'Document',legacy:(Browser.Engine.trident)?null:window.Document,initialize:function(doc){$uid(doc);doc.head=doc.getElementsByTagName('head')[0];doc.html=doc.getElementsByTagName('html')[0];doc.window=doc.defaultView||doc.parentWindow;if(Browser.Engine.trident4)$try(function(){doc.execCommand("BackgroundImageCache",false,true);});return $extend(doc,Document.Prototype);},afterImplement:function(property,value){document[property]=Document.Prototype[property]=value;}});Document.Prototype={$family:{name:'document'}};new Document(document);Array.implement({every:function(fn,bind){for(var i=0,l=this.length;i<l;i++){if(!fn.call(bind,this[i],i,this))return false;}
+return true;},filter:function(fn,bind){var results=[];for(var i=0,l=this.length;i<l;i++){if(fn.call(bind,this[i],i,this))results.push(this[i]);}
+return results;},clean:function(){return this.filter($defined);},indexOf:function(item,from){var len=this.length;for(var i=(from<0)?Math.max(0,len+from):from||0;i<len;i++){if(this[i]===item)return i;}
+return-1;},map:function(fn,bind){var results=[];for(var i=0,l=this.length;i<l;i++)results[i]=fn.call(bind,this[i],i,this);return results;},some:function(fn,bind){for(var i=0,l=this.length;i<l;i++){if(fn.call(bind,this[i],i,this))return true;}
+return false;},associate:function(keys){var obj={},length=Math.min(this.length,keys.length);for(var i=0;i<length;i++)obj[keys[i]]=this[i];return obj;},link:function(object){var result={};for(var i=0,l=this.length;i<l;i++){for(var key in object){if(object[key](this[i])){result[key]=this[i];delete object[key];break;}}}
+return result;},contains:function(item,from){return this.indexOf(item,from)!=-1;},extend:function(array){for(var i=0,j=array.length;i<j;i++)this.push(array[i]);return this;},getLast:function(){return(this.length)?this[this.length-1]:null;},getRandom:function(){return(this.length)?this[$random(0,this.length-1)]:null;},include:function(item){if(!this.contains(item))this.push(item);return this;},combine:function(array){for(var i=0,l=array.length;i<l;i++)this.include(array[i]);return this;},erase:function(item){for(var i=this.length;i--;i){if(this[i]===item)this.splice(i,1);}
+return this;},empty:function(){this.length=0;return this;},flatten:function(){var array=[];for(var i=0,l=this.length;i<l;i++){var type=$type(this[i]);if(!type)continue;array=array.concat((type=='array'||type=='collection'||type=='arguments')?Array.flatten(this[i]):this[i]);}
+return array;},hexToRgb:function(array){if(this.length!=3)return null;var rgb=this.map(function(value){if(value.length==1)value+=value;return value.toInt(16);});return(array)?rgb:'rgb('+rgb+')';},rgbToHex:function(array){if(this.length<3)return null;if(this.length==4&&this[3]==0&&!array)return'transparent';var hex=[];for(var i=0;i<3;i++){var bit=(this[i]-0).toString(16);hex.push((bit.length==1)?'0'+bit:bit);}
+return(array)?hex:'#'+hex.join('');}});Function.implement({extend:function(properties){for(var property in properties)this[property]=properties[property];return this;},create:function(options){var self=this;options=options||{};return function(event){var args=options.arguments;args=(args!=undefined)?$splat(args):Array.slice(arguments,(options.event)?1:0);if(options.event)args=[event||window.event].extend(args);var returns=function(){return self.apply(options.bind||null,args);};if(options.delay)return setTimeout(returns,options.delay);if(options.periodical)return setInterval(returns,options.periodical);if(options.attempt)return $try(returns);return returns();};},pass:function(args,bind){return this.create({arguments:args,bind:bind});},attempt:function(args,bind){return this.create({arguments:args,bind:bind,attempt:true})();},bind:function(bind,args){return this.create({bind:bind,arguments:args});},bindWithEvent:function(bind,args){return this.create({bind:bind,event:true,arguments:args});},delay:function(delay,bind,args){return this.create({delay:delay,bind:bind,arguments:args})();},periodical:function(interval,bind,args){return this.create({periodical:interval,bind:bind,arguments:args})();},run:function(args,bind){return this.apply(bind,$splat(args));}});Number.implement({limit:function(min,max){return Math.min(max,Math.max(min,this));},round:function(precision){precision=Math.pow(10,precision||0);return Math.round(this*precision)/precision;},times:function(fn,bind){for(var i=0;i<this;i++)fn.call(bind,i,this);},toFloat:function(){return parseFloat(this);},toInt:function(base){return parseInt(this,base||10);}});Number.alias('times','each');(function(math){var methods={};math.each(function(name){if(!Number[name])methods[name]=function(){return Math[name].apply(null,[this].concat($A(arguments)));};});Number.implement(methods);})(['abs','acos','asin','atan','atan2','ceil','cos','exp','floor','log','max','min','pow','sin','sqrt','tan']);String.implement({test:function(regex,params){return((typeof regex=='string')?new RegExp(regex,params):regex).test(this);},contains:function(string,separator){return(separator)?(separator+this+separator).indexOf(separator+string+separator)>-1:this.indexOf(string)>-1;},trim:function(){return this.replace(/^\s+|\s+$/g,'');},clean:function(){return this.replace(/\s+/g,' ').trim();},camelCase:function(){return this.replace(/-\D/g,function(match){return match.charAt(1).toUpperCase();});},hyphenate:function(){return this.replace(/[A-Z]/g,function(match){return('-'+match.charAt(0).toLowerCase());});},capitalize:function(){return this.replace(/\b[a-z]/g,function(match){return match.toUpperCase();});},escapeRegExp:function(){return this.replace(/([-.*+?^${}()|[\]\/\\])/g,'\\$1');},toInt:function(base){return parseInt(this,base||10);},toFloat:function(){return parseFloat(this);},hexToRgb:function(array){var hex=this.match(/^#?(\w{1,2})(\w{1,2})(\w{1,2})$/);return(hex)?hex.slice(1).hexToRgb(array):null;},rgbToHex:function(array){var rgb=this.match(/\d{1,3}/g);return(rgb)?rgb.rgbToHex(array):null;},stripScripts:function(option){var scripts='';var text=this.replace(/<script[^>]*>([\s\S]*?)<\/script>/gi,function(){scripts+=arguments[1]+'\n';return'';});if(option===true)$exec(scripts);else if($type(option)=='function')option(scripts,text);return text;},substitute:function(object,regexp){return this.replace(regexp||(/\\?\{([^}]+)\}/g),function(match,name){if(match.charAt(0)=='\\')return match.slice(1);return(object[name]!=undefined)?object[name]:'';});}});Hash.implement({has:Object.prototype.hasOwnProperty,keyOf:function(value){for(var key in this){if(this.hasOwnProperty(key)&&this[key]===value)return key;}
+return null;},hasValue:function(value){return(Hash.keyOf(this,value)!==null);},extend:function(properties){Hash.each(properties,function(value,key){Hash.set(this,key,value);},this);return this;},combine:function(properties){Hash.each(properties,function(value,key){Hash.include(this,key,value);},this);return this;},erase:function(key){if(this.hasOwnProperty(key))delete this[key];return this;},get:function(key){return(this.hasOwnProperty(key))?this[key]:null;},set:function(key,value){if(!this[key]||this.hasOwnProperty(key))this[key]=value;return this;},empty:function(){Hash.each(this,function(value,key){delete this[key];},this);return this;},include:function(key,value){var k=this[key];if(k==undefined)this[key]=value;return this;},map:function(fn,bind){var results=new Hash;Hash.each(this,function(value,key){results.set(key,fn.call(bind,value,key,this));},this);return results;},filter:function(fn,bind){var results=new Hash;Hash.each(this,function(value,key){if(fn.call(bind,value,key,this))results.set(key,value);},this);return results;},every:function(fn,bind){for(var key in this){if(this.hasOwnProperty(key)&&!fn.call(bind,this[key],key))return false;}
+return true;},some:function(fn,bind){for(var key in this){if(this.hasOwnProperty(key)&&fn.call(bind,this[key],key))return true;}
+return false;},getKeys:function(){var keys=[];Hash.each(this,function(value,key){keys.push(key);});return keys;},getValues:function(){var values=[];Hash.each(this,function(value){values.push(value);});return values;},toQueryString:function(base){var queryString=[];Hash.each(this,function(value,key){if(base)key=base+'['+key+']';var result;switch($type(value)){case'object':result=Hash.toQueryString(value,key);break;case'array':var qs={};value.each(function(val,i){qs[i]=val;});result=Hash.toQueryString(qs,key);break;default:result=key+'='+encodeURIComponent(value);}
+if(value!=undefined)queryString.push(result);});return queryString.join('&');}});Hash.alias({keyOf:'indexOf',hasValue:'contains'});var Event=new Native({name:'Event',initialize:function(event,win){win=win||window;var doc=win.document;event=event||win.event;if(event.$extended)return event;this.$extended=true;var type=event.type;var target=event.target||event.srcElement;while(target&&target.nodeType==3)target=target.parentNode;if(type.test(/key/)){var code=event.which||event.keyCode;var key=Event.Keys.keyOf(code);if(type=='keydown'){var fKey=code-111;if(fKey>0&&fKey<13)key='f'+fKey;}
+key=key||String.fromCharCode(code).toLowerCase();}else if(type.match(/(click|mouse|menu)/i)){doc=(!doc.compatMode||doc.compatMode=='CSS1Compat')?doc.html:doc.body;var page={x:event.pageX||event.clientX+doc.scrollLeft,y:event.pageY||event.clientY+doc.scrollTop};var client={x:(event.pageX)?event.pageX-win.pageXOffset:event.clientX,y:(event.pageY)?event.pageY-win.pageYOffset:event.clientY};if(type.match(/DOMMouseScroll|mousewheel/)){var wheel=(event.wheelDelta)?event.wheelDelta/120:-(event.detail||0)/3;}
+var rightClick=(event.which==3)||(event.button==2);var related=null;if(type.match(/over|out/)){switch(type){case'mouseover':related=event.relatedTarget||event.fromElement;break;case'mouseout':related=event.relatedTarget||event.toElement;}
+if(!(function(){while(related&&related.nodeType==3)related=related.parentNode;return true;}).create({attempt:Browser.Engine.gecko})())related=false;}}
+return $extend(this,{event:event,type:type,page:page,client:client,rightClick:rightClick,wheel:wheel,relatedTarget:related,target:target,code:code,key:key,shift:event.shiftKey,control:event.ctrlKey,alt:event.altKey,meta:event.metaKey});}});Event.Keys=new Hash({'enter':13,'up':38,'down':40,'left':37,'right':39,'esc':27,'space':32,'backspace':8,'tab':9,'delete':46});Event.implement({stop:function(){return this.stopPropagation().preventDefault();},stopPropagation:function(){if(this.event.stopPropagation)this.event.stopPropagation();else this.event.cancelBubble=true;return this;},preventDefault:function(){if(this.event.preventDefault)this.event.preventDefault();else this.event.returnValue=false;return this;}});var Class=new Native({name:'Class',initialize:function(properties){properties=properties||{};var klass=function(empty){for(var key in this)this[key]=$unlink(this[key]);for(var mutator in Class.Mutators){if(!this[mutator])continue;Class.Mutators[mutator](this,this[mutator]);delete this[mutator];}
+this.constructor=klass;if(empty===$empty)return this;var self=(this.initialize)?this.initialize.apply(this,arguments):this;if(this.options&&this.options.initialize)this.options.initialize.call(this);return self;};$extend(klass,this);klass.constructor=Class;klass.prototype=properties;return klass;}});Class.implement({implement:function(){Class.Mutators.Implements(this.prototype,Array.slice(arguments));return this;}});Class.Mutators={Implements:function(self,klasses){$splat(klasses).each(function(klass){$extend(self,($type(klass)=='class')?new klass($empty):klass);});},Extends:function(self,klass){var instance=new klass($empty);delete instance.parent;delete instance.parentOf;for(var key in instance){var current=self[key],previous=instance[key];if(current==undefined){self[key]=previous;continue;}
+var ctype=$type(current),ptype=$type(previous);if(ctype!=ptype)continue;switch(ctype){case'function':if(!arguments.callee.caller)self[key]=eval('('+String(current).replace(/\bthis\.parent\(\s*(\))?/g,function(full,close){return'arguments.callee._parent_.call(this'+(close||', ');})+')');self[key]._parent_=previous;break;case'object':self[key]=$merge(previous,current);}}
+self.parent=function(){return arguments.callee.caller._parent_.apply(this,arguments);};self.parentOf=function(descendant){return descendant._parent_.apply(this,Array.slice(arguments,1));};}};var Chain=new Class({chain:function(){this.$chain=(this.$chain||[]).extend(arguments);return this;},callChain:function(){return(this.$chain&&this.$chain.length)?this.$chain.shift().apply(this,arguments):false;},clearChain:function(){if(this.$chain)this.$chain.empty();return this;}});var Events=new Class({addEvent:function(type,fn,internal){type=Events.removeOn(type);if(fn!=$empty){this.$events=this.$events||{};this.$events[type]=this.$events[type]||[];this.$events[type].include(fn);if(internal)fn.internal=true;}
+return this;},addEvents:function(events){for(var type in events)this.addEvent(type,events[type]);return this;},fireEvent:function(type,args,delay){type=Events.removeOn(type);if(!this.$events||!this.$events[type])return this;this.$events[type].each(function(fn){fn.create({'bind':this,'delay':delay,'arguments':args})();},this);return this;},removeEvent:function(type,fn){type=Events.removeOn(type);if(!this.$events||!this.$events[type])return this;if(!fn.internal)this.$events[type].erase(fn);return this;},removeEvents:function(type){for(var e in this.$events){if(type&&type!=e)continue;var fns=this.$events[e];for(var i=fns.length;i--;i)this.removeEvent(e,fns[i]);}
+return this;}});Events.removeOn=function(string){return string.replace(/^on([A-Z])/,function(full,first){return first.toLowerCase();});};var Options=new Class({setOptions:function(){this.options=$merge.run([this.options].extend(arguments));if(!this.addEvent)return this;for(var option in this.options){if($type(this.options[option])!='function'||!(/^on[A-Z]/).test(option))continue;this.addEvent(option,this.options[option]);delete this.options[option];}
+return this;}});Document.implement({newElement:function(tag,props){if(Browser.Engine.trident&&props){['name','type','checked'].each(function(attribute){if(!props[attribute])return;tag+=' '+attribute+'="'+props[attribute]+'"';if(attribute!='checked')delete props[attribute];});tag='<'+tag+'>';}
+return $.element(this.createElement(tag)).set(props);},newTextNode:function(text){return this.createTextNode(text);},getDocument:function(){return this;},getWindow:function(){return this.defaultView||this.parentWindow;},purge:function(){var elements=this.getElementsByTagName('*');for(var i=0,l=elements.length;i<l;i++)Browser.freeMem(elements[i]);}});var Element=new Native({name:'Element',legacy:window.Element,initialize:function(tag,props){var konstructor=Element.Constructors.get(tag);if(konstructor)return konstructor(props);if(typeof tag=='string')return document.newElement(tag,props);return $(tag).set(props);},afterImplement:function(key,value){if(!Array[key])Elements.implement(key,Elements.multi(key));Element.Prototype[key]=value;}});Element.Prototype={$family:{name:'element'}};Element.Constructors=new Hash;var IFrame=new Native({name:'IFrame',generics:false,initialize:function(){var params=Array.link(arguments,{properties:Object.type,iframe:$defined});var props=params.properties||{};var iframe=$(params.iframe)||false;var onload=props.onload||$empty;delete props.onload;props.id=props.name=$pick(props.id,props.name,iframe.id,iframe.name,'IFrame_'+$time());iframe=new Element(iframe||'iframe',props);var onFrameLoad=function(){var host=$try(function(){return iframe.contentWindow.location.host;});if(host&&host==window.location.host){var win=new Window(iframe.contentWindow);var doc=new Document(iframe.contentWindow.document);$extend(win.Element.prototype,Element.Prototype);}
+onload.call(iframe.contentWindow,iframe.contentWindow.document);};(!window.frames[props.id])?iframe.addListener('load',onFrameLoad):onFrameLoad();return iframe;}});var Elements=new Native({initialize:function(elements,options){options=$extend({ddup:true,cash:true},options);elements=elements||[];if(options.ddup||options.cash){var uniques={},returned=[];for(var i=0,l=elements.length;i<l;i++){var el=$.element(elements[i],!options.cash);if(options.ddup){if(uniques[el.uid])continue;uniques[el.uid]=true;}
+returned.push(el);}
+elements=returned;}
+return(options.cash)?$extend(elements,this):elements;}});Elements.implement({filter:function(filter,bind){if(!filter)return this;return new Elements(Array.filter(this,(typeof filter=='string')?function(item){return item.match(filter);}:filter,bind));}});Elements.multi=function(property){return function(){var items=[];var elements=true;for(var i=0,j=this.length;i<j;i++){var returns=this[i][property].apply(this[i],arguments);items.push(returns);if(elements)elements=($type(returns)=='element');}
+return(elements)?new Elements(items):items;};};Window.implement({$:function(el,nocash){if(el&&el.$family&&el.uid)return el;var type=$type(el);return($[type])?$[type](el,nocash,this.document):null;},$$:function(selector){if(arguments.length==1&&typeof selector=='string')return this.document.getElements(selector);var elements=[];var args=Array.flatten(arguments);for(var i=0,l=args.length;i<l;i++){var item=args[i];switch($type(item)){case'element':item=[item];break;case'string':item=this.document.getElements(item,true);break;default:item=false;}
+if(item)elements.extend(item);}
+return new Elements(elements);},getDocument:function(){return this.document;},getWindow:function(){return this;}});$.string=function(id,nocash,doc){id=doc.getElementById(id);return(id)?$.element(id,nocash):null;};$.element=function(el,nocash){$uid(el);if(!nocash&&!el.$family&&!(/^object|embed$/i).test(el.tagName)){var proto=Element.Prototype;for(var p in proto)el[p]=proto[p];};return el;};$.object=function(obj,nocash,doc){if(obj.toElement)return $.element(obj.toElement(doc),nocash);return null;};$.textnode=$.whitespace=$.window=$.document=$arguments(0);Native.implement([Element,Document],{getElement:function(selector,nocash){return $(this.getElements(selector,true)[0]||null,nocash);},getElements:function(tags,nocash){tags=tags.split(',');var elements=[];var ddup=(tags.length>1);tags.each(function(tag){var partial=this.getElementsByTagName(tag.trim());(ddup)?elements.extend(partial):elements=partial;},this);return new Elements(elements,{ddup:ddup,cash:!nocash});}});Element.Storage={get:function(uid){return(this[uid]||(this[uid]={}));}};Element.Inserters=new Hash({before:function(context,element){if(element.parentNode)element.parentNode.insertBefore(context,element);},after:function(context,element){if(!element.parentNode)return;var next=element.nextSibling;(next)?element.parentNode.insertBefore(context,next):element.parentNode.appendChild(context);},bottom:function(context,element){element.appendChild(context);},top:function(context,element){var first=element.firstChild;(first)?element.insertBefore(context,first):element.appendChild(context);}});Element.Inserters.inside=Element.Inserters.bottom;Element.Inserters.each(function(value,key){var Key=key.capitalize();Element.implement('inject'+Key,function(el){value(this,$(el,true));return this;});Element.implement('grab'+Key,function(el){value($(el,true),this);return this;});});Element.implement({getDocument:function(){return this.ownerDocument;},getWindow:function(){return this.ownerDocument.getWindow();},getElementById:function(id,nocash){var el=this.ownerDocument.getElementById(id);if(!el)return null;for(var parent=el.parentNode;parent!=this;parent=parent.parentNode){if(!parent)return null;}
+return $.element(el,nocash);},set:function(prop,value){switch($type(prop)){case'object':for(var p in prop)this.set(p,prop[p]);break;case'string':var property=Element.Properties.get(prop);(property&&property.set)?property.set.apply(this,Array.slice(arguments,1)):this.setProperty(prop,value);}
+return this;},get:function(prop){var property=Element.Properties.get(prop);return(property&&property.get)?property.get.apply(this,Array.slice(arguments,1)):this.getProperty(prop);},erase:function(prop){var property=Element.Properties.get(prop);(property&&property.erase)?property.erase.apply(this,Array.slice(arguments,1)):this.removeProperty(prop);return this;},match:function(tag){return(!tag||Element.get(this,'tag')==tag);},inject:function(el,where){Element.Inserters.get(where||'bottom')(this,$(el,true));return this;},wraps:function(el,where){el=$(el,true);return this.replaces(el).grab(el,where);},grab:function(el,where){Element.Inserters.get(where||'bottom')($(el,true),this);return this;},appendText:function(text,where){return this.grab(this.getDocument().newTextNode(text),where);},adopt:function(){Array.flatten(arguments).each(function(element){element=$(element,true);if(element)this.appendChild(element);},this);return this;},dispose:function(){return(this.parentNode)?this.parentNode.removeChild(this):this;},clone:function(contents,keepid){switch($type(this)){case'element':var attributes={};for(var j=0,l=this.attributes.length;j<l;j++){var attribute=this.attributes[j],key=attribute.nodeName.toLowerCase();if(Browser.Engine.trident&&(/input/i).test(this.tagName)&&(/width|height/).test(key))continue;var value=(key=='style'&&this.style)?this.style.cssText:attribute.nodeValue;if(!$chk(value)||key=='uid'||(key=='id'&&!keepid))continue;if(value!='inherit'&&['string','number'].contains($type(value)))attributes[key]=value;}
+var element=new Element(this.nodeName.toLowerCase(),attributes);if(contents!==false){for(var i=0,k=this.childNodes.length;i<k;i++){var child=Element.clone(this.childNodes[i],true,keepid);if(child)element.grab(child);}}
+return element;case'textnode':return document.newTextNode(this.nodeValue);}
+return null;},replaces:function(el){el=$(el,true);el.parentNode.replaceChild(this,el);return this;},hasClass:function(className){return this.className.contains(className,' ');},addClass:function(className){if(!this.hasClass(className))this.className=(this.className+' '+className).clean();return this;},removeClass:function(className){this.className=this.className.replace(new RegExp('(^|\\s)'+className+'(?:\\s|$)'),'$1').clean();return this;},toggleClass:function(className){return this.hasClass(className)?this.removeClass(className):this.addClass(className);},getComputedStyle:function(property){if(this.currentStyle)return this.currentStyle[property.camelCase()];var computed=this.getWindow().getComputedStyle(this,null);return(computed)?computed.getPropertyValue([property.hyphenate()]):null;},empty:function(){$A(this.childNodes).each(function(node){Browser.freeMem(node);Element.empty(node);Element.dispose(node);},this);return this;},destroy:function(){Browser.freeMem(this.empty().dispose());return null;},getSelected:function(){return new Elements($A(this.options).filter(function(option){return option.selected;}));},toQueryString:function(){var queryString=[];this.getElements('input, select, textarea').each(function(el){if(!el.name||el.disabled)return;var value=(el.tagName.toLowerCase()=='select')?Element.getSelected(el).map(function(opt){return opt.value;}):((el.type=='radio'||el.type=='checkbox')&&!el.checked)?null:el.value;$splat(value).each(function(val){if(val)queryString.push(el.name+'='+encodeURIComponent(val));});});return queryString.join('&');},getProperty:function(attribute){var EA=Element.Attributes,key=EA.Props[attribute];var value=(key)?this[key]:this.getAttribute(attribute,2);return(EA.Bools[attribute])?!!value:(key)?value:value||null;},getProperties:function(){var args=$A(arguments);return args.map(function(attr){return this.getProperty(attr);},this).associate(args);},setProperty:function(attribute,value){var EA=Element.Attributes,key=EA.Props[attribute],hasValue=$defined(value);if(key&&EA.Bools[attribute])value=(value||!hasValue)?true:false;else if(!hasValue)return this.removeProperty(attribute);(key)?this[key]=value:this.setAttribute(attribute,value);return this;},setProperties:function(attributes){for(var attribute in attributes)this.setProperty(attribute,attributes[attribute]);return this;},removeProperty:function(attribute){var EA=Element.Attributes,key=EA.Props[attribute],isBool=(key&&EA.Bools[attribute]);(key)?this[key]=(isBool)?false:'':this.removeAttribute(attribute);return this;},removeProperties:function(){Array.each(arguments,this.removeProperty,this);return this;}});(function(){var walk=function(element,walk,start,match,all,nocash){var el=element[start||walk];var elements=[];while(el){if(el.nodeType==1&&(!match||Element.match(el,match))){elements.push(el);if(!all)break;}
+el=el[walk];}
+return(all)?new Elements(elements,{ddup:false,cash:!nocash}):$(elements[0],nocash);};Element.implement({getPrevious:function(match,nocash){return walk(this,'previousSibling',null,match,false,nocash);},getAllPrevious:function(match,nocash){return walk(this,'previousSibling',null,match,true,nocash);},getNext:function(match,nocash){return walk(this,'nextSibling',null,match,false,nocash);},getAllNext:function(match,nocash){return walk(this,'nextSibling',null,match,true,nocash);},getFirst:function(match,nocash){return walk(this,'nextSibling','firstChild',match,false,nocash);},getLast:function(match,nocash){return walk(this,'previousSibling','lastChild',match,false,nocash);},getParent:function(match,nocash){return walk(this,'parentNode',null,match,false,nocash);},getParents:function(match,nocash){return walk(this,'parentNode',null,match,true,nocash);},getChildren:function(match,nocash){return walk(this,'nextSibling','firstChild',match,true,nocash);},hasChild:function(el){el=$(el,true);return(!!el&&$A(this.getElementsByTagName(el.tagName)).contains(el));}});})();Element.Properties=new Hash;Element.Properties.style={set:function(style){this.style.cssText=style;},get:function(){return this.style.cssText;},erase:function(){this.style.cssText='';}};Element.Properties.tag={get:function(){return this.tagName.toLowerCase();}};Element.Properties.href={get:function(){return(!this.href)?null:this.href.replace(new RegExp('^'+document.location.protocol+'\/\/'+document.location.host),'');}};Element.Properties.html={set:function(){return this.innerHTML=Array.flatten(arguments).join('');}};Native.implement([Element,Window,Document],{addListener:function(type,fn){if(this.addEventListener)this.addEventListener(type,fn,false);else this.attachEvent('on'+type,fn);return this;},removeListener:function(type,fn){if(this.removeEventListener)this.removeEventListener(type,fn,false);else this.detachEvent('on'+type,fn);return this;},retrieve:function(property,dflt){var storage=Element.Storage.get(this.uid);var prop=storage[property];if($defined(dflt)&&!$defined(prop))prop=storage[property]=dflt;return $pick(prop);},store:function(property,value){var storage=Element.Storage.get(this.uid);storage[property]=value;return this;},eliminate:function(property){var storage=Element.Storage.get(this.uid);delete storage[property];return this;}});Element.Attributes=new Hash({Props:{'html':'innerHTML','class':'className','for':'htmlFor','text':(Browser.Engine.trident)?'innerText':'textContent'},Bools:['compact','nowrap','ismap','declare','noshade','checked','disabled','readonly','multiple','selected','noresize','defer'],Camels:['value','accessKey','cellPadding','cellSpacing','colSpan','frameBorder','maxLength','readOnly','rowSpan','tabIndex','useMap']});Browser.freeMem=function(item){if(!item)return;if(Browser.Engine.trident&&(/object/i).test(item.tagName)){for(var p in item){if(typeof item[p]=='function')item[p]=$empty;}
+Element.dispose(item);}
+if(item.uid&&item.removeEvents)item.removeEvents();};(function(EA){var EAB=EA.Bools,EAC=EA.Camels;EA.Bools=EAB=EAB.associate(EAB);Hash.extend(Hash.combine(EA.Props,EAB),EAC.associate(EAC.map(function(v){return v.toLowerCase();})));EA.erase('Camels');})(Element.Attributes);window.addListener('unload',function(){window.removeListener('unload',arguments.callee);document.purge();if(Browser.Engine.trident)CollectGarbage();});Element.Properties.events={set:function(events){this.addEvents(events);}};Native.implement([Element,Window,Document],{addEvent:function(type,fn){var events=this.retrieve('events',{});events[type]=events[type]||{'keys':[],'values':[]};if(events[type].keys.contains(fn))return this;events[type].keys.push(fn);var realType=type,custom=Element.Events.get(type),condition=fn,self=this;if(custom){if(custom.onAdd)custom.onAdd.call(this,fn);if(custom.condition){condition=function(event){if(custom.condition.call(this,event))return fn.call(this,event);return false;};}
+realType=custom.base||realType;}
+var defn=function(){return fn.call(self);};var nativeEvent=Element.NativeEvents[realType]||0;if(nativeEvent){if(nativeEvent==2){defn=function(event){event=new Event(event,self.getWindow());if(condition.call(self,event)===false)event.stop();};}
+this.addListener(realType,defn);}
+events[type].values.push(defn);return this;},removeEvent:function(type,fn){var events=this.retrieve('events');if(!events||!events[type])return this;var pos=events[type].keys.indexOf(fn);if(pos==-1)return this;var key=events[type].keys.splice(pos,1)[0];var value=events[type].values.splice(pos,1)[0];var custom=Element.Events.get(type);if(custom){if(custom.onRemove)custom.onRemove.call(this,fn);type=custom.base||type;}
+return(Element.NativeEvents[type])?this.removeListener(type,value):this;},addEvents:function(events){for(var event in events)this.addEvent(event,events[event]);return this;},removeEvents:function(type){var events=this.retrieve('events');if(!events)return this;if(!type){for(var evType in events)this.removeEvents(evType);events=null;}else if(events[type]){while(events[type].keys[0])this.removeEvent(type,events[type].keys[0]);events[type]=null;}
+return this;},fireEvent:function(type,args,delay){var events=this.retrieve('events');if(!events||!events[type])return this;events[type].keys.each(function(fn){fn.create({'bind':this,'delay':delay,'arguments':args})();},this);return this;},cloneEvents:function(from,type){from=$(from);var fevents=from.retrieve('events');if(!fevents)return this;if(!type){for(var evType in fevents)this.cloneEvents(from,evType);}else if(fevents[type]){fevents[type].keys.each(function(fn){this.addEvent(type,fn);},this);}
+return this;}});Element.NativeEvents={click:2,dblclick:2,mouseup:2,mousedown:2,contextmenu:2,mousewheel:2,DOMMouseScroll:2,mouseover:2,mouseout:2,mousemove:2,selectstart:2,selectend:2,keydown:2,keypress:2,keyup:2,focus:2,blur:2,change:2,reset:2,select:2,submit:2,load:1,unload:1,beforeunload:2,resize:1,move:1,DOMContentLoaded:1,readystatechange:1,error:1,abort:1,scroll:1};(function(){var $check=function(event){var related=event.relatedTarget;if(related==undefined)return true;if(related===false)return false;return($type(this)!='document'&&related!=this&&related.prefix!='xul'&&!this.hasChild(related));};Element.Events=new Hash({mouseenter:{base:'mouseover',condition:$check},mouseleave:{base:'mouseout',condition:$check},mousewheel:{base:(Browser.Engine.gecko)?'DOMMouseScroll':'mousewheel'}});})();Element.Properties.styles={set:function(styles){this.setStyles(styles);}};Element.Properties.opacity={set:function(opacity,novisibility){if(!novisibility){if(opacity==0){if(this.style.visibility!='hidden')this.style.visibility='hidden';}else{if(this.style.visibility!='visible')this.style.visibility='visible';}}
+if(!this.currentStyle||!this.currentStyle.hasLayout)this.style.zoom=1;if(Browser.Engine.trident)this.style.filter=(opacity==1)?'':'alpha(opacity='+opacity*100+')';this.style.opacity=opacity;this.store('opacity',opacity);},get:function(){return this.retrieve('opacity',1);}};Element.implement({setOpacity:function(value){return this.set('opacity',value,true);},getOpacity:function(){return this.get('opacity');},setStyle:function(property,value){switch(property){case'opacity':return this.set('opacity',parseFloat(value));case'float':property=(Browser.Engine.trident)?'styleFloat':'cssFloat';}
+property=property.camelCase();if($type(value)!='string'){var map=(Element.Styles.get(property)||'@').split(' ');value=$splat(value).map(function(val,i){if(!map[i])return'';return($type(val)=='number')?map[i].replace('@',Math.round(val)):val;}).join(' ');}else if(value==String(Number(value))){value=Math.round(value);}
+this.style[property]=value;return this;},getStyle:function(property){switch(property){case'opacity':return this.get('opacity');case'float':property=(Browser.Engine.trident)?'styleFloat':'cssFloat';}
+property=property.camelCase();var result=this.style[property];if(!$chk(result)){result=[];for(var style in Element.ShortStyles){if(property!=style)continue;for(var s in Element.ShortStyles[style])result.push(this.getStyle(s));return result.join(' ');}
+result=this.getComputedStyle(property);}
+if(result){result=String(result);var color=result.match(/rgba?\([\d\s,]+\)/);if(color)result=result.replace(color[0],color[0].rgbToHex());}
+if(Browser.Engine.presto||(Browser.Engine.trident&&!$chk(parseInt(result)))){if(property.test(/^(height|width)$/)){var values=(property=='width')?['left','right']:['top','bottom'],size=0;values.each(function(value){size+=this.getStyle('border-'+value+'-width').toInt()+this.getStyle('padding-'+value).toInt();},this);return this['offset'+property.capitalize()]-size+'px';}
+if(Browser.Engine.presto&&String(result).test('px'))return result;if(property.test(/(border(.+)Width|margin|padding)/))return'0px';}
+return result;},setStyles:function(styles){for(var style in styles)this.setStyle(style,styles[style]);return this;},getStyles:function(){var result={};Array.each(arguments,function(key){result[key]=this.getStyle(key);},this);return result;}});Element.Styles=new Hash({left:'@px',top:'@px',bottom:'@px',right:'@px',width:'@px',height:'@px',maxWidth:'@px',maxHeight:'@px',minWidth:'@px',minHeight:'@px',backgroundColor:'rgb(@, @, @)',backgroundPosition:'@px @px',color:'rgb(@, @, @)',fontSize:'@px',letterSpacing:'@px',lineHeight:'@px',clip:'rect(@px @px @px @px)',margin:'@px @px @px @px',padding:'@px @px @px @px',border:'@px @ rgb(@, @, @) @px @ rgb(@, @, @) @px @ rgb(@, @, @)',borderWidth:'@px @px @px @px',borderStyle:'@ @ @ @',borderColor:'rgb(@, @, @) rgb(@, @, @) rgb(@, @, @) rgb(@, @, @)',zIndex:'@','zoom':'@',fontWeight:'@',textIndent:'@px',opacity:'@'});Element.ShortStyles={margin:{},padding:{},border:{},borderWidth:{},borderStyle:{},borderColor:{}};['Top','Right','Bottom','Left'].each(function(direction){var Short=Element.ShortStyles;var All=Element.Styles;['margin','padding'].each(function(style){var sd=style+direction;Short[style][sd]=All[sd]='@px';});var bd='border'+direction;Short.border[bd]=All[bd]='@px @ rgb(@, @, @)';var bdw=bd+'Width',bds=bd+'Style',bdc=bd+'Color';Short[bd]={};Short.borderWidth[bdw]=Short[bd][bdw]=All[bdw]='@px';Short.borderStyle[bds]=Short[bd][bds]=All[bds]='@';Short.borderColor[bdc]=Short[bd][bdc]=All[bdc]='rgb(@, @, @)';});(function(){Element.implement({scrollTo:function(x,y){if(isBody(this)){this.getWindow().scrollTo(x,y);}else{this.scrollLeft=x;this.scrollTop=y;}
+return this;},getSize:function(){if(isBody(this))return this.getWindow().getSize();return{x:this.offsetWidth,y:this.offsetHeight};},getScrollSize:function(){if(isBody(this))return this.getWindow().getScrollSize();return{x:this.scrollWidth,y:this.scrollHeight};},getScroll:function(){if(isBody(this))return this.getWindow().getScroll();return{x:this.scrollLeft,y:this.scrollTop};},getScrolls:function(){var element=this,position={x:0,y:0};while(element&&!isBody(element)){position.x+=element.scrollLeft;position.y+=element.scrollTop;element=element.parentNode;}
+return position;},getOffsetParent:function(){var element=this;if(isBody(element))return null;if(!Browser.Engine.trident)return element.offsetParent;while((element=element.parentNode)&&!isBody(element)){if(styleString(element,'position')!='static')return element;}
+return null;},getOffsets:function(){var element=this,position={x:0,y:0};if(isBody(this))return position;while(element&&!isBody(element)){position.x+=element.offsetLeft;position.y+=element.offsetTop;if(Browser.Engine.gecko){if(!borderBox(element)){position.x+=leftBorder(element);position.y+=topBorder(element);}
+var parent=element.parentNode;if(parent&&styleString(parent,'overflow')!='visible'){position.x+=leftBorder(parent);position.y+=topBorder(parent);}}else if(element!=this&&(Browser.Engine.trident||Browser.Engine.webkit)){position.x+=leftBorder(element);position.y+=topBorder(element);}
+element=element.offsetParent;if(Browser.Engine.trident){while(element&&!element.currentStyle.hasLayout)element=element.offsetParent;}}
+if(Browser.Engine.gecko&&!borderBox(this)){position.x-=leftBorder(this);position.y-=topBorder(this);}
+return position;},getPosition:function(relative){if(isBody(this))return{x:0,y:0};var offset=this.getOffsets(),scroll=this.getScrolls();var position={x:offset.x-scroll.x,y:offset.y-scroll.y};var relativePosition=(relative&&(relative=$(relative)))?relative.getPosition():{x:0,y:0};return{x:position.x-relativePosition.x,y:position.y-relativePosition.y};},getCoordinates:function(element){if(isBody(this))return this.getWindow().getCoordinates();var position=this.getPosition(element),size=this.getSize();var obj={left:position.x,top:position.y,width:size.x,height:size.y};obj.right=obj.left+obj.width;obj.bottom=obj.top+obj.height;return obj;},computePosition:function(obj){return{left:obj.x-styleNumber(this,'margin-left'),top:obj.y-styleNumber(this,'margin-top')};},position:function(obj){return this.setStyles(this.computePosition(obj));}});Native.implement([Document,Window],{getSize:function(){var win=this.getWindow();if(Browser.Engine.presto||Browser.Engine.webkit)return{x:win.innerWidth,y:win.innerHeight};var doc=getCompatElement(this);return{x:doc.clientWidth,y:doc.clientHeight};},getScroll:function(){var win=this.getWindow();var doc=getCompatElement(this);return{x:win.pageXOffset||doc.scrollLeft,y:win.pageYOffset||doc.scrollTop};},getScrollSize:function(){var doc=getCompatElement(this);var min=this.getSize();return{x:Math.max(doc.scrollWidth,min.x),y:Math.max(doc.scrollHeight,min.y)};},getPosition:function(){return{x:0,y:0};},getCoordinates:function(){var size=this.getSize();return{top:0,left:0,bottom:size.y,right:size.x,height:size.y,width:size.x};}});var styleString=Element.getComputedStyle;function styleNumber(element,style){return styleString(element,style).toInt()||0;};function borderBox(element){return styleString(element,'-moz-box-sizing')=='border-box';};function topBorder(element){return styleNumber(element,'border-top-width');};function leftBorder(element){return styleNumber(element,'border-left-width');};function isBody(element){return(/^(?:body|html)$/i).test(element.tagName);};function getCompatElement(element){var doc=element.getDocument();return(!doc.compatMode||doc.compatMode=='CSS1Compat')?doc.html:doc.body;};})();Native.implement([Window,Document,Element],{getHeight:function(){return this.getSize().y;},getWidth:function(){return this.getSize().x;},getScrollTop:function(){return this.getScroll().y;},getScrollLeft:function(){return this.getScroll().x;},getScrollHeight:function(){return this.getScrollSize().y;},getScrollWidth:function(){return this.getScrollSize().x;},getTop:function(){return this.getPosition().y;},getLeft:function(){return this.getPosition().x;}});Native.implement([Document,Element],{getElements:function(expression,nocash){expression=expression.split(',');var items,local={};for(var i=0,l=expression.length;i<l;i++){var selector=expression[i],elements=Selectors.Utils.search(this,selector,local);if(i!=0&&elements.item)elements=$A(elements);items=(i==0)?elements:(items.item)?$A(items).concat(elements):items.concat(elements);}
+return new Elements(items,{ddup:(expression.length>1),cash:!nocash});}});Element.implement({match:function(selector){if(!selector)return true;var tagid=Selectors.Utils.parseTagAndID(selector);var tag=tagid[0],id=tagid[1];if(!Selectors.Filters.byID(this,id)||!Selectors.Filters.byTag(this,tag))return false;var parsed=Selectors.Utils.parseSelector(selector);return(parsed)?Selectors.Utils.filter(this,parsed,{}):true;}});var Selectors={Cache:{nth:{},parsed:{}}};Selectors.RegExps={id:(/#([\w-]+)/),tag:(/^(\w+|\*)/),quick:(/^(\w+|\*)$/),splitter:(/\s*([+>~\s])\s*([a-zA-Z#.*:\[])/g),combined:(/\.([\w-]+)|\[(\w+)(?:([!*^$~|]?=)["']?(.*?)["']?)?\]|:([\w-]+)(?:\(["']?(.*?)?["']?\)|$)/g)};Selectors.Utils={chk:function(item,uniques){if(!uniques)return true;var uid=$uid(item);if(!uniques[uid])return uniques[uid]=true;return false;},parseNthArgument:function(argument){if(Selectors.Cache.nth[argument])return Selectors.Cache.nth[argument];var parsed=argument.match(/^([+-]?\d*)?([a-z]+)?([+-]?\d*)?$/);if(!parsed)return false;var inta=parseInt(parsed[1]);var a=(inta||inta===0)?inta:1;var special=parsed[2]||false;var b=parseInt(parsed[3])||0;if(a!=0){b--;while(b<1)b+=a;while(b>=a)b-=a;}else{a=b;special='index';}
+switch(special){case'n':parsed={a:a,b:b,special:'n'};break;case'odd':parsed={a:2,b:0,special:'n'};break;case'even':parsed={a:2,b:1,special:'n'};break;case'first':parsed={a:0,special:'index'};break;case'last':parsed={special:'last-child'};break;case'only':parsed={special:'only-child'};break;default:parsed={a:(a-1),special:'index'};}
+return Selectors.Cache.nth[argument]=parsed;},parseSelector:function(selector){if(Selectors.Cache.parsed[selector])return Selectors.Cache.parsed[selector];var m,parsed={classes:[],pseudos:[],attributes:[]};while((m=Selectors.RegExps.combined.exec(selector))){var cn=m[1],an=m[2],ao=m[3],av=m[4],pn=m[5],pa=m[6];if(cn){parsed.classes.push(cn);}else if(pn){var parser=Selectors.Pseudo.get(pn);if(parser)parsed.pseudos.push({parser:parser,argument:pa});else parsed.attributes.push({name:pn,operator:'=',value:pa});}else if(an){parsed.attributes.push({name:an,operator:ao,value:av});}}
+if(!parsed.classes.length)delete parsed.classes;if(!parsed.attributes.length)delete parsed.attributes;if(!parsed.pseudos.length)delete parsed.pseudos;if(!parsed.classes&&!parsed.attributes&&!parsed.pseudos)parsed=null;return Selectors.Cache.parsed[selector]=parsed;},parseTagAndID:function(selector){var tag=selector.match(Selectors.RegExps.tag);var id=selector.match(Selectors.RegExps.id);return[(tag)?tag[1]:'*',(id)?id[1]:false];},filter:function(item,parsed,local){var i;if(parsed.classes){for(i=parsed.classes.length;i--;i){var cn=parsed.classes[i];if(!Selectors.Filters.byClass(item,cn))return false;}}
+if(parsed.attributes){for(i=parsed.attributes.length;i--;i){var att=parsed.attributes[i];if(!Selectors.Filters.byAttribute(item,att.name,att.operator,att.value))return false;}}
+if(parsed.pseudos){for(i=parsed.pseudos.length;i--;i){var psd=parsed.pseudos[i];if(!Selectors.Filters.byPseudo(item,psd.parser,psd.argument,local))return false;}}
+return true;},getByTagAndID:function(ctx,tag,id){if(id){var item=(ctx.getElementById)?ctx.getElementById(id,true):Element.getElementById(ctx,id,true);return(item&&Selectors.Filters.byTag(item,tag))?[item]:[];}else{return ctx.getElementsByTagName(tag);}},search:function(self,expression,local){var splitters=[];var selectors=expression.trim().replace(Selectors.RegExps.splitter,function(m0,m1,m2){splitters.push(m1);return':)'+m2;}).split(':)');var items,match,filtered,item;for(var i=0,l=selectors.length;i<l;i++){var selector=selectors[i];if(i==0&&Selectors.RegExps.quick.test(selector)){items=self.getElementsByTagName(selector);continue;}
+var splitter=splitters[i-1];var tagid=Selectors.Utils.parseTagAndID(selector);var tag=tagid[0],id=tagid[1];if(i==0){items=Selectors.Utils.getByTagAndID(self,tag,id);}else{var uniques={},found=[];for(var j=0,k=items.length;j<k;j++)found=Selectors.Getters[splitter](found,items[j],tag,id,uniques);items=found;}
+var parsed=Selectors.Utils.parseSelector(selector);if(parsed){filtered=[];for(var m=0,n=items.length;m<n;m++){item=items[m];if(Selectors.Utils.filter(item,parsed,local))filtered.push(item);}
+items=filtered;}}
+return items;}};Selectors.Getters={' ':function(found,self,tag,id,uniques){var items=Selectors.Utils.getByTagAndID(self,tag,id);for(var i=0,l=items.length;i<l;i++){var item=items[i];if(Selectors.Utils.chk(item,uniques))found.push(item);}
+return found;},'>':function(found,self,tag,id,uniques){var children=Selectors.Utils.getByTagAndID(self,tag,id);for(var i=0,l=children.length;i<l;i++){var child=children[i];if(child.parentNode==self&&Selectors.Utils.chk(child,uniques))found.push(child);}
+return found;},'+':function(found,self,tag,id,uniques){while((self=self.nextSibling)){if(self.nodeType==1){if(Selectors.Utils.chk(self,uniques)&&Selectors.Filters.byTag(self,tag)&&Selectors.Filters.byID(self,id))found.push(self);break;}}
+return found;},'~':function(found,self,tag,id,uniques){while((self=self.nextSibling)){if(self.nodeType==1){if(!Selectors.Utils.chk(self,uniques))break;if(Selectors.Filters.byTag(self,tag)&&Selectors.Filters.byID(self,id))found.push(self);}}
+return found;}};Selectors.Filters={byTag:function(self,tag){return(tag=='*'||(self.tagName&&self.tagName.toLowerCase()==tag));},byID:function(self,id){return(!id||(self.id&&self.id==id));},byClass:function(self,klass){return(self.className&&self.className.contains(klass,' '));},byPseudo:function(self,parser,argument,local){return parser.call(self,argument,local);},byAttribute:function(self,name,operator,value){var result=Element.prototype.getProperty.call(self,name);if(!result)return false;if(!operator||value==undefined)return true;switch(operator){case'=':return(result==value);case'*=':return(result.contains(value));case'^=':return(result.substr(0,value.length)==value);case'$=':return(result.substr(result.length-value.length)==value);case'!=':return(result!=value);case'~=':return result.contains(value,' ');case'|=':return result.contains(value,'-');}
+return false;}};Selectors.Pseudo=new Hash({empty:function(){return!(this.innerText||this.textContent||'').length;},not:function(selector){return!Element.match(this,selector);},contains:function(text){return(this.innerText||this.textContent||'').contains(text);},'first-child':function(){return Selectors.Pseudo.index.call(this,0);},'last-child':function(){var element=this;while((element=element.nextSibling)){if(element.nodeType==1)return false;}
+return true;},'only-child':function(){var prev=this;while((prev=prev.previousSibling)){if(prev.nodeType==1)return false;}
+var next=this;while((next=next.nextSibling)){if(next.nodeType==1)return false;}
+return true;},'nth-child':function(argument,local){argument=(argument==undefined)?'n':argument;var parsed=Selectors.Utils.parseNthArgument(argument);if(parsed.special!='n')return Selectors.Pseudo[parsed.special].call(this,parsed.a,local);var count=0;local.positions=local.positions||{};var uid=$uid(this);if(!local.positions[uid]){var self=this;while((self=self.previousSibling)){if(self.nodeType!=1)continue;count++;var position=local.positions[$uid(self)];if(position!=undefined){count=position+count;break;}}
+local.positions[uid]=count;}
+return(local.positions[uid]%parsed.a==parsed.b);},index:function(index){var element=this,count=0;while((element=element.previousSibling)){if(element.nodeType==1&&++count>index)return false;}
+return(count==index);},even:function(argument,local){return Selectors.Pseudo['nth-child'].call(this,'2n+1',local);},odd:function(argument,local){return Selectors.Pseudo['nth-child'].call(this,'2n',local);}});Element.Events.domready={onAdd:function(fn){if(Browser.loaded)fn.call(this);}};(function(){var domready=function(){if(Browser.loaded)return;Browser.loaded=true;window.fireEvent('domready');document.fireEvent('domready');};switch(Browser.Engine.name){case'webkit':(function(){(['loaded','complete'].contains(document.readyState))?domready():arguments.callee.delay(50);})();break;case'trident':var temp=document.createElement('div');(function(){($try(function(){temp.doScroll('left');return $(temp).inject(document.body).set('html','temp').dispose();}))?domready():arguments.callee.delay(50);})();break;default:window.addEvent('load',domready);document.addEvent('DOMContentLoaded',domready);}})();var JSON=new Hash({encode:function(obj){switch($type(obj)){case'string':return'"'+obj.replace(/[\x00-\x1f\\"]/g,JSON.$replaceChars)+'"';case'array':return'['+String(obj.map(JSON.encode).filter($defined))+']';case'object':case'hash':var string=[];Hash.each(obj,function(value,key){var json=JSON.encode(value);if(json)string.push(JSON.encode(key)+':'+json);});return'{'+string+'}';case'number':case'boolean':return String(obj);case false:return'null';}
+return null;},$specialChars:{'\b':'\\b','\t':'\\t','\n':'\\n','\f':'\\f','\r':'\\r','"':'\\"','\\':'\\\\'},$replaceChars:function(chr){return JSON.$specialChars[chr]||'\\u00'+Math.floor(chr.charCodeAt()/16).toString(16)+(chr.charCodeAt()%16).toString(16);},decode:function(string,secure){if($type(string)!='string'||!string.length)return null;if(secure&&!(/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(string.replace(/\\./g,'@').replace(/"[^"\\\n\r]*"/g,'')))return null;return eval('('+string+')');}});Native.implement([Hash,Array,String,Number],{toJSON:function(){return JSON.encode(this);}});var Cookie=new Class({Implements:Options,options:{path:false,domain:false,duration:false,secure:false,document:document},initialize:function(key,options){this.key=key;this.setOptions(options);},write:function(value){value=encodeURIComponent(value);if(this.options.domain)value+='; domain='+this.options.domain;if(this.options.path)value+='; path='+this.options.path;if(this.options.duration){var date=new Date();date.setTime(date.getTime()+this.options.duration*24*60*60*1000);value+='; expires='+date.toGMTString();}
+if(this.options.secure)value+='; secure';this.options.document.cookie=this.key+'='+value;return this;},read:function(){var value=this.options.document.cookie.match('(?:^|;)\\s*'+this.key.escapeRegExp()+'=([^;]*)');return(value)?decodeURIComponent(value[1]):null;},dispose:function(){new Cookie(this.key,$merge(this.options,{duration:-1})).write('');return this;}});Cookie.write=function(key,value,options){return new Cookie(key,options).write(value);};Cookie.read=function(key){return new Cookie(key).read();};Cookie.dispose=function(key,options){return new Cookie(key,options).dispose();};var Swiff=new Class({Implements:[Options],options:{id:null,height:1,width:1,container:null,properties:{},params:{quality:'high',allowScriptAccess:'always',wMode:'transparent',swLiveConnect:true},callBacks:{},vars:{}},toElement:function(){return this.object;},initialize:function(path,options){this.instance='Swiff_'+$time();this.setOptions(options);options=this.options;var id=this.id=options.id||this.instance;var container=$(options.container);Swiff.CallBacks[this.instance]={};var params=options.params,vars=options.vars,callBacks=options.callBacks;var properties=$extend({height:options.height,width:options.width},options.properties);var self=this;for(var callBack in callBacks){Swiff.CallBacks[this.instance][callBack]=(function(option){return function(){return option.apply(self.object,arguments);};})(callBacks[callBack]);vars[callBack]='Swiff.CallBacks.'+this.instance+'.'+callBack;}
+params.flashVars=Hash.toQueryString(vars);if(Browser.Engine.trident){properties.classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000';params.movie=path;}else{properties.type='application/x-shockwave-flash';properties.data=path;}
+var build='<object id="'+id+'"';for(var property in properties)build+=' '+property+'="'+properties[property]+'"';build+='>';for(var param in params){if(params[param])build+='<param name="'+param+'" value="'+params[param]+'" />';}
+build+='</object>';this.object=((container)?container.empty():new Element('div')).set('html',build).firstChild;},replaces:function(element){element=$(element,true);element.parentNode.replaceChild(this.toElement(),element);return this;},inject:function(element){$(element,true).appendChild(this.toElement());return this;},remote:function(){return Swiff.remote.apply(Swiff,[this.toElement()].extend(arguments));}});Swiff.CallBacks={};Swiff.remote=function(obj,fn){var rs=obj.CallFunction('<invoke name="'+fn+'" returntype="javascript">'+__flash__argumentsToXML(arguments,2)+'</invoke>');return eval(rs);};var Fx=new Class({Implements:[Chain,Events,Options],options:{fps:50,unit:false,duration:500,link:'ignore',transition:function(p){return-(Math.cos(Math.PI*p)-1)/2;}},initialize:function(options){this.subject=this.subject||this;this.setOptions(options);this.options.duration=Fx.Durations[this.options.duration]||this.options.duration.toInt();var wait=this.options.wait;if(wait===false)this.options.link='cancel';},step:function(){var time=$time();if(time<this.time+this.options.duration){var delta=this.options.transition((time-this.time)/this.options.duration);this.set(this.compute(this.from,this.to,delta));}else{this.set(this.compute(this.from,this.to,1));this.complete();}},set:function(now){return now;},compute:function(from,to,delta){return Fx.compute(from,to,delta);},check:function(caller){if(!this.timer)return true;switch(this.options.link){case'cancel':this.cancel();return true;case'chain':this.chain(caller.bind(this,Array.slice(arguments,1)));return false;}
+return false;},start:function(from,to){if(!this.check(arguments.callee,from,to))return this;this.from=from;this.to=to;this.time=0;this.startTimer();this.onStart();return this;},complete:function(){if(this.stopTimer())this.onComplete();return this;},cancel:function(){if(this.stopTimer())this.onCancel();return this;},onStart:function(){this.fireEvent('start',this.subject);},onComplete:function(){this.fireEvent('complete',this.subject);if(!this.callChain())this.fireEvent('chainComplete',this.subject);},onCancel:function(){this.fireEvent('cancel',this.subject).clearChain();},pause:function(){this.stopTimer();return this;},resume:function(){this.startTimer();return this;},stopTimer:function(){if(!this.timer)return false;this.time=$time()-this.time;this.timer=$clear(this.timer);return true;},startTimer:function(){if(this.timer)return false;this.time=$time()-this.time;this.timer=this.step.periodical(Math.round(1000/this.options.fps),this);return true;}});Fx.compute=function(from,to,delta){return(to-from)*delta+from;};Fx.Durations={'short':250,'normal':500,'long':1000};Fx.CSS=new Class({Extends:Fx,prepare:function(element,property,values){values=$splat(values);var values1=values[1];if(!$chk(values1)){values[1]=values[0];values[0]=element.getStyle(property);}
+var parsed=values.map(this.parse);return{from:parsed[0],to:parsed[1]};},parse:function(value){value=$lambda(value)();value=(typeof value=='string')?value.split(' '):$splat(value);return value.map(function(val){val=String(val);var found=false;Fx.CSS.Parsers.each(function(parser,key){if(found)return;var parsed=parser.parse(val);if($chk(parsed))found={value:parsed,parser:parser};});found=found||{value:val,parser:Fx.CSS.Parsers.String};return found;});},compute:function(from,to,delta){var computed=[];(Math.min(from.length,to.length)).times(function(i){computed.push({value:from[i].parser.compute(from[i].value,to[i].value,delta),parser:from[i].parser});});computed.$family={name:'fx:css:value'};return computed;},serve:function(value,unit){if($type(value)!='fx:css:value')value=this.parse(value);var returned=[];value.each(function(bit){returned=returned.concat(bit.parser.serve(bit.value,unit));});return returned;},render:function(element,property,value,unit){element.setStyle(property,this.serve(value,unit));},search:function(selector){if(Fx.CSS.Cache[selector])return Fx.CSS.Cache[selector];var to={};Array.each(document.styleSheets,function(sheet,j){var href=sheet.href;if(href&&href.contains('://')&&!href.contains(document.domain))return;var rules=sheet.rules||sheet.cssRules;Array.each(rules,function(rule,i){if(!rule.style)return;var selectorText=(rule.selectorText)?rule.selectorText.replace(/^\w+/,function(m){return m.toLowerCase();}):null;if(!selectorText||!selectorText.test('^'+selector+'$'))return;Element.Styles.each(function(value,style){if(!rule.style[style]||Element.ShortStyles[style])return;value=String(rule.style[style]);to[style]=(value.test(/^rgb/))?value.rgbToHex():value;});});});return Fx.CSS.Cache[selector]=to;}});Fx.CSS.Cache={};Fx.CSS.Parsers=new Hash({Color:{parse:function(value){if(value.match(/^#[0-9a-f]{3,6}$/i))return value.hexToRgb(true);return((value=value.match(/(\d+),\s*(\d+),\s*(\d+)/)))?[value[1],value[2],value[3]]:false;},compute:function(from,to,delta){return from.map(function(value,i){return Math.round(Fx.compute(from[i],to[i],delta));});},serve:function(value){return value.map(Number);}},Number:{parse:parseFloat,compute:Fx.compute,serve:function(value,unit){return(unit)?value+unit:value;}},String:{parse:$lambda(false),compute:$arguments(1),serve:$arguments(0)}});Fx.Tween=new Class({Extends:Fx.CSS,initialize:function(element,options){this.element=this.subject=$(element);this.parent(options);},set:function(property,now){if(arguments.length==1){now=property;property=this.property||this.options.property;}
+this.render(this.element,property,now,this.options.unit);return this;},start:function(property,from,to){if(!this.check(arguments.callee,property,from,to))return this;var args=Array.flatten(arguments);this.property=this.options.property||args.shift();var parsed=this.prepare(this.element,this.property,args);return this.parent(parsed.from,parsed.to);}});Element.Properties.tween={set:function(options){var tween=this.retrieve('tween');if(tween)tween.cancel();return this.eliminate('tween').store('tween:options',$extend({link:'cancel'},options));},get:function(options){if(options||!this.retrieve('tween')){if(options||!this.retrieve('tween:options'))this.set('tween',options);this.store('tween',new Fx.Tween(this,this.retrieve('tween:options')));}
+return this.retrieve('tween');}};Element.implement({tween:function(property,from,to){this.get('tween').start(arguments);return this;},fade:function(how){var fade=this.get('tween'),o='opacity',toggle;how=$pick(how,'toggle');switch(how){case'in':fade.start(o,1);break;case'out':fade.start(o,0);break;case'show':fade.set(o,1);break;case'hide':fade.set(o,0);break;case'toggle':var flag=this.retrieve('fade:flag',this.get('opacity')==1);fade.start(o,(flag)?0:1);this.store('fade:flag',!flag);toggle=true;break;default:fade.start(o,arguments);}
+if(!toggle)this.eliminate('fade:flag');return this;},highlight:function(start,end){if(!end){end=this.retrieve('highlight:original',this.getStyle('background-color'));end=(end=='transparent')?'#fff':end;}
+var tween=this.get('tween');tween.start('background-color',start||'#ffff88',end).chain(function(){this.setStyle('background-color',this.retrieve('highlight:original'));tween.callChain();}.bind(this));return this;}});Fx.Morph=new Class({Extends:Fx.CSS,initialize:function(element,options){this.element=this.subject=$(element);this.parent(options);},set:function(now){if(typeof now=='string')now=this.search(now);for(var p in now)this.render(this.element,p,now[p],this.options.unit);return this;},compute:function(from,to,delta){var now={};for(var p in from)now[p]=this.parent(from[p],to[p],delta);return now;},start:function(properties){if(!this.check(arguments.callee,properties))return this;if(typeof properties=='string')properties=this.search(properties);var from={},to={};for(var p in properties){var parsed=this.prepare(this.element,p,properties[p]);from[p]=parsed.from;to[p]=parsed.to;}
+return this.parent(from,to);}});Element.Properties.morph={set:function(options){var morph=this.retrieve('morph');if(morph)morph.cancel();return this.eliminate('morph').store('morph:options',$extend({link:'cancel'},options));},get:function(options){if(options||!this.retrieve('morph')){if(options||!this.retrieve('morph:options'))this.set('morph',options);this.store('morph',new Fx.Morph(this,this.retrieve('morph:options')));}
+return this.retrieve('morph');}};Element.implement({morph:function(props){this.get('morph').start(props);return this;}});(function(){var old=Fx.prototype.initialize;Fx.prototype.initialize=function(options){old.call(this,options);var trans=this.options.transition;if(typeof trans=='string'&&(trans=trans.split(':'))){var base=Fx.Transitions;base=base[trans[0]]||base[trans[0].capitalize()];if(trans[1])base=base['ease'+trans[1].capitalize()+(trans[2]?trans[2].capitalize():'')];this.options.transition=base;}};})();Fx.Transition=function(transition,params){params=$splat(params);return $extend(transition,{easeIn:function(pos){return transition(pos,params);},easeOut:function(pos){return 1-transition(1-pos,params);},easeInOut:function(pos){return(pos<=0.5)?transition(2*pos,params)/2:(2-transition(2*(1-pos),params))/2;}});};Fx.Transitions=new Hash({linear:$arguments(0)});Fx.Transitions.extend=function(transitions){for(var transition in transitions)Fx.Transitions[transition]=new Fx.Transition(transitions[transition]);};Fx.Transitions.extend({Pow:function(p,x){return Math.pow(p,x[0]||6);},Expo:function(p){return Math.pow(2,8*(p-1));},Circ:function(p){return 1-Math.sin(Math.acos(p));},Sine:function(p){return 1-Math.sin((1-p)*Math.PI/2);},Back:function(p,x){x=x[0]||1.618;return Math.pow(p,2)*((x+1)*p-x);},Bounce:function(p){var value;for(var a=0,b=1;1;a+=b,b/=2){if(p>=(7-4*a)/11){value=-Math.pow((11-6*a-11*p)/4,2)+b*b;break;}}
+return value;},Elastic:function(p,x){return Math.pow(2,10*--p)*Math.cos(20*p*Math.PI*(x[0]||1)/3);}});['Quad','Cubic','Quart','Quint'].each(function(transition,i){Fx.Transitions[transition]=new Fx.Transition(function(p){return Math.pow(p,[i+2]);});});var Request=new Class({Implements:[Chain,Events,Options],options:{url:'',data:'',headers:{'X-Requested-With':'XMLHttpRequest','Accept':'text/javascript, text/html, application/xml, text/xml, */*'},async:true,format:false,method:'post',link:'ignore',isSuccess:null,emulation:true,urlEncoded:true,encoding:'utf-8',evalScripts:false,evalResponse:false},initialize:function(options){this.xhr=new Browser.Request();this.setOptions(options);this.options.isSuccess=this.options.isSuccess||this.isSuccess;this.headers=new Hash(this.options.headers);},onStateChange:function(){if(this.xhr.readyState!=4||!this.running)return;this.running=false;this.status=0;$try(function(){this.status=this.xhr.status;}.bind(this));if(this.options.isSuccess.call(this,this.status)){this.response={text:this.xhr.responseText,xml:this.xhr.responseXML};this.success(this.response.text,this.response.xml);}else{this.response={text:null,xml:null};this.failure();}
+this.xhr.onreadystatechange=$empty;},isSuccess:function(){return((this.status>=200)&&(this.status<300));},processScripts:function(text){if(this.options.evalResponse||(/(ecma|java)script/).test(this.getHeader('Content-type')))return $exec(text);return text.stripScripts(this.options.evalScripts);},success:function(text,xml){this.onSuccess(this.processScripts(text),xml);},onSuccess:function(){this.fireEvent('complete',arguments).fireEvent('success',arguments).callChain();},failure:function(){this.onFailure();},onFailure:function(){this.fireEvent('complete').fireEvent('failure',this.xhr);},setHeader:function(name,value){this.headers.set(name,value);return this;},getHeader:function(name){return $try(function(){return this.xhr.getResponseHeader(name);}.bind(this));},check:function(caller){if(!this.running)return true;switch(this.options.link){case'cancel':this.cancel();return true;case'chain':this.chain(caller.bind(this,Array.slice(arguments,1)));return false;}
+return false;},send:function(options){if(!this.check(arguments.callee,options))return this;this.running=true;var type=$type(options);if(type=='string'||type=='element')options={data:options};var old=this.options;options=$extend({data:old.data,url:old.url,method:old.method},options);var data=options.data,url=options.url,method=options.method;switch($type(data)){case'element':data=$(data).toQueryString();break;case'object':case'hash':data=Hash.toQueryString(data);}
+if(this.options.format){var format='format='+this.options.format;data=(data)?format+'&'+data:format;}
+if(this.options.emulation&&['put','delete'].contains(method)){var _method='_method='+method;data=(data)?_method+'&'+data:_method;method='post';}
+if(this.options.urlEncoded&&method=='post'){var encoding=(this.options.encoding)?'; charset='+this.options.encoding:'';this.headers.set('Content-type','application/x-www-form-urlencoded'+encoding);}
+if(data&&method=='get'){url=url+(url.contains('?')?'&':'?')+data;data=null;}
+this.xhr.open(method.toUpperCase(),url,this.options.async);this.xhr.onreadystatechange=this.onStateChange.bind(this);this.headers.each(function(value,key){if(!$try(function(){this.xhr.setRequestHeader(key,value);return true;}.bind(this)))this.fireEvent('exception',[key,value]);},this);this.fireEvent('request');this.xhr.send(data);if(!this.options.async)this.onStateChange();return this;},cancel:function(){if(!this.running)return this;this.running=false;this.xhr.abort();this.xhr.onreadystatechange=$empty;this.xhr=new Browser.Request();this.fireEvent('cancel');return this;}});(function(){var methods={};['get','post','put','delete','GET','POST','PUT','DELETE'].each(function(method){methods[method]=function(){var params=Array.link(arguments,{url:String.type,data:$defined});return this.send($extend(params,{method:method.toLowerCase()}));};});Request.implement(methods);})();Element.Properties.send={set:function(options){var send=this.retrieve('send');if(send)send.cancel();return this.eliminate('send').store('send:options',$extend({data:this,link:'cancel',method:this.get('method')||'post',url:this.get('action')},options));},get:function(options){if(options||!this.retrieve('send')){if(options||!this.retrieve('send:options'))this.set('send',options);this.store('send',new Request(this.retrieve('send:options')));}
+return this.retrieve('send');}};Element.implement({send:function(url){var sender=this.get('send');sender.send({data:this,url:url||sender.options.url});return this;}});Request.HTML=new Class({Extends:Request,options:{update:false,evalScripts:true,filter:false},processHTML:function(text){var match=text.match(/<body[^>]*>([\s\S]*?)<\/body>/i);text=(match)?match[1]:text;var container=new Element('div');return $try(function(){var root='<root>'+text+'</root>',doc;if(Browser.Engine.trident){doc=new ActiveXObject('Microsoft.XMLDOM');doc.async=false;doc.loadXML(root);}else{doc=new DOMParser().parseFromString(root,'text/xml');}
+root=doc.getElementsByTagName('root')[0];for(var i=0,k=root.childNodes.length;i<k;i++){var child=Element.clone(root.childNodes[i],true,true);if(child)container.grab(child);}
+return container;})||container.set('html',text);},success:function(text){var options=this.options,response=this.response;response.html=text.stripScripts(function(script){response.javascript=script;});var temp=this.processHTML(response.html);response.tree=temp.childNodes;response.elements=temp.getElements('*');if(options.filter)response.tree=response.elements.filter(options.filter);if(options.update)$(options.update).empty().adopt(response.tree);if(options.evalScripts)$exec(response.javascript);this.onSuccess(response.tree,response.elements,response.html,response.javascript);}});Element.Properties.load={set:function(options){var load=this.retrieve('load');if(load)send.cancel();return this.eliminate('load').store('load:options',$extend({data:this,link:'cancel',update:this,method:'get'},options));},get:function(options){if(options||!this.retrieve('load')){if(options||!this.retrieve('load:options'))this.set('load',options);this.store('load',new Request.HTML(this.retrieve('load:options')));}
+return this.retrieve('load');}};Element.implement({load:function(){this.get('load').send(Array.link(arguments,{data:Object.type,url:String.type}));return this;}});Request.JSON=new Class({Extends:Request,options:{secure:true},initialize:function(options){this.parent(options);this.headers.extend({'Accept':'application/json','X-Request':'JSON'});},success:function(text){this.response.json=JSON.decode(text,this.options.secure);this.onSuccess(this.response.json,text);}});
diff --git a/For Weekly Test/tricode/mutexFunctions.php b/For Weekly Test/tricode/mutexFunctions.php
new file mode 100644
index 0000000..af45610
--- /dev/null
+++ b/For Weekly Test/tricode/mutexFunctions.php
@@ -0,0 +1,36 @@
+<?
+//Mutex functions
+function Lock($lockName,$seconds)
+{
+ $sql = "SELECT GET_LOCK('$lockName', $seconds);";
+ $res = mysql_query($sql);
+ if (!$res)
+ {
+ die('Could not query:' . mysql_error());
+ }
+ return mysql_result($res,0);
+}
+
+function IsLocked($lockName)
+{
+ $sql = "SELECT IS_FREE_LOCK('$lockName');";
+ $res = mysql_query($sql);
+ if (!$res)
+ {
+ die('Could not query:' . mysql_error());
+ }
+ return mysql_result($res,0);
+}
+
+function ReleaseLock($lockName)
+{
+ $sql = "SELECT RELEASE_LOCK('$lockName');";
+ $res = mysql_query($sql);
+ if (!$res)
+ {
+ die('Could not query:' . mysql_error());
+ }
+ return mysql_result($res,0);
+}
+//End of mutex functions
+?>
diff --git a/For Weekly Test/tricode/mutexTry.php b/For Weekly Test/tricode/mutexTry.php
new file mode 100755
index 0000000..a671a54
--- /dev/null
+++ b/For Weekly Test/tricode/mutexTry.php
@@ -0,0 +1,238 @@
+<html>
+<head>
+<script src='delayedLoading.js' type="text/javascript"></script>
+<!--ADD HERE ALL THE NEEDED META DATA -->
+<title>Network test live results!</title>
+<link rel="stylesheet" href="css/tableCSS.css" type="text/css" media="screen">
+</head>
+<body onscroll="scrollEvent();" onload="loaderInit();">
+<div>
+<?php
+
+//Connection stuff
+//DB
+$dbhost = 'localhost';
+$dbuser = 'root';
+$dbpass = 'randompasswordSQL';
+
+//Socket
+$port = 34500;
+$ip = 'localhost';
+
+$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die('Error connecting to mysql');
+
+$dbname = 'gsmselftesting';
+mysql_select_db($dbname);
+//End of connection stuff
+include 'mutexFunctions.php'; //mutex functions, isfree, lock and release
+include 'insertData.php'; //insert task functions
+
+$nameOfLock = 'Webpage';
+$timeToKeepTheMutex = 360;
+
+$locking = isLocked($nameOfLock);//Check if the webpage is already open
+
+if ($locking == '1') //1 means nobody is on the website
+{
+ $lockMe = Lock($nameOfLock,$timeToKeepTheMutex); //Set a mutex for the webpage
+ if ($lockMe == '1') //1 means a successful lock
+ {
+ include 'post.php'; // read posted data and add them to the database
+// echo 'WE had errors: '. $errorAdding;
+ //stuff to do here
+ //check if the software is running!
+ $softwareLock = 'SoftwareStarted';
+
+ if($taskAmount!=0)
+ {
+ $softwareRunning = isLocked($softwareLock);
+ if($softwareRunning == '1') //1 means software is not started yet, start it
+ {
+ $startApp = fsockopen($ip, 34600, $errno, $error, 5);
+ if (!$startApp)
+ {
+ printf('THE SOFTWARE THAT SHOULD RUN IN BACKGROUND IS NOT RUNNING!');
+ }
+ else
+ {
+ socket_set_timeout( $startApp, 50); //one should set the number of the longest test, so we can define the timeout
+ fwrite($startApp, "START APP");
+ usleep(2500);
+ fclose($startApp);
+ }
+
+ //exec("/usr/bin/python /var/www/tricode/gsmselftest2.py > /dev/null 2>&1 &"); //start the software in background and don't wait for any output
+ sleep(6); //sleep half second till the software starts
+ //the software should be running already and set the lock, now we test it and then connect to it!
+
+ $softwareRunning1 = isLocked($softwareLock);
+ if($softwareRunning1 == '0') //Software running and waiting for connection!
+ {
+ //try to open the socket and connect to the software
+ $fp = fsockopen($ip, $port, $errno, $error, 5);
+
+ if (!$fp)
+ {
+ echo 'Could not open the socket or connect to the testing software! Check ports on both sides!';
+
+ }
+ else
+ {
+ socket_set_timeout($fp,50); //one should set the number of the longest test, so we can define the timeout function (it is the number after "$fp,")
+
+ fwrite($fp, "START TEST"); //send command to start the tests
+ if(!feof($fp))
+ {
+ while(!feof($fp))
+ {
+ $received = fgets($fp, 128); //receive data!
+
+ if ($received == "CONFIRM\n") //we got the confirmation from the testing software
+ {
+ //test finished successfully
+ $GSMRZ1 = 0;
+ $GSMRZ2 = 0;
+ $GSMRZ3 = 0;
+
+ $SIP = 0;
+ $UNISIP = 0;
+ $LANDLINE = 0;
+ $LSFKS = 0;
+
+ $GSMEE = 0;
+ $GSMEV = 0;
+ $GSMET = 0;
+ $GSMEO = 0;
+
+ $SIPP = 0;
+ $LANDLINEP = 0;
+ $UNISIPP = 0;
+ $NANOBTS1P = 0;
+ $NANOBTS2P = 0;
+ /////////// end of test!
+ echo '<div id="main">
+ <table summary = "Results">
+ <thead>
+ <tr>
+ <th scope = "col"> From: </th>
+ <th scope = "col" > To: </th>
+ <th scope = "col"> Message: </th>
+ <th scope = "col"> Status: </th>
+ </tr>
+ </thead>
+ <!-- start of the table rows-->
+ <tbody>';
+ echo str_repeat("\n",7024);
+ flush();
+ }
+ elseif ($received == "TEST DONE\n")
+ {
+
+ echo '</tbody></table>';
+ echo '</div>';
+ echo '<div id="sidebar">';
+ echo "<a class='pChart' href='networkResult.php?S=$SIP&RZ1=$GSMRZ1&RZ2=$GSMRZ2&RZ3=$GSMRZ3&US=$UNISIP&LL=$LANDLINE&LS=$LSFKS&EE=$GSMEE&EV=$GSMEV&ET=$GSMET&EO=$GSMEO&SP=$SIPP&SGP=$LANDLINEP&USP=$UNISIPP&NBP1=$NANOBTS1P&NBP2=$NANOBTS2P' data-pchart-alt='Picture3'>Picture 3</a></div>";
+ echo '<div id="footer">Number of tasks: '.$taskAmount.'<br> Number of tasks tried to add to the DB but had an error: '. $errorAdding .'<br> TEST SUCCESSFULLY FINISHED!</div>';
+ echo str_repeat("\n",7024);
+ flush();
+ usleep(100);
+ fwrite($fp, 'DISCONNECT'); //tell the testing software it may close
+ break;
+ }
+ else
+ {
+ //parse the received data!
+ $received = str_replace("\n",'',$received);
+ $dataForTable = explode("|", $received);
+ $callFrom = strtoupper($dataForTable[1]);
+ $callTo = strtoupper($dataForTable[2]);
+ $testStatus = strtoupper($dataForTable[3]);
+ //ADD HERE THE TEST CASES BUT MAKE IT INSIDE OF A FILE (e.q. include 'testing.php'); HERE I PUT IT ONLY FOR EXAMPLE PURPOSES!
+
+ if($callFrom == 'SIP' || $callTo == 'SIP')
+ {
+ if($testStatus == '200')
+ {
+ $SIP = 1;
+ echo 'SIP set to 1';
+ }
+ }
+ if($callFrom == 'GSMRZ1' || $callTo == 'GSMRZ1')
+ {
+ if($testStatus == '200')
+ {
+ echo 'GSMRZ1 set to 1';
+ $GSMRZ1 = 1;
+ }
+ }
+
+ //END OF TEST CASE EXAMPLE
+ echo '<tr>
+ <th scope = "row" id = "r100">'. $dataForTable[1] . '</th>
+ <th scope = "row" id = "r100">'. $dataForTable[2] . '</th>
+ <td> ' . $dataForTable[4] . ' </td>
+ <td>' . $dataForTable[3] . '</td>
+ </tr>';
+ //echo $received . '<br>';
+ echo str_repeat("\n",7024);
+ flush();
+ usleep(100);
+ fwrite($fp, "CONTINUE"); //tell the software to proceed with the test and confirm receiving data
+ }
+ }
+ }
+
+ fclose($fp);//close the soccket and the connection
+
+ }
+
+ }
+ elseif($softwareRunning1 == '1')
+ {
+ echo 'Testing software was not started(didn\'t obtain the lock)! Check it!';
+ }
+ else
+ {
+ echo 'Testing software didn\'t obtain the lock';
+ }
+ }
+ elseif($softwareRunning == '0') //0 means the software is still running in the background
+ {
+ echo 'Testing software is still running! Maybe you should kill it (if not started manually!)';
+ }
+ else
+ {
+ echo 'We have an unknown error! Refresh te web page!';
+ }
+
+ //$release = ReleaseLock($nameOfLock);
+ //echo $release . "<br>";
+ }
+ else
+ {
+ echo 'No single test was selected! Please go back and select at least one test';
+ }
+ }
+ elseif($lockMe == '0') //0 means if the attempt timed out (for example, because another client has previously locked the name)
+ {
+ echo 'Someone was faster than you';
+ }
+ else
+ {
+ // # if an error occurred (such as running out of memory or the thread was killed with
+ echo 'We have an error here';
+ }
+}
+elseif ($locking == '0') //0 means somebody is already on the web site
+{
+ echo 'Somebody is using the web site already!' . "<br>";
+}
+else
+{
+ echo 'We have some serious error here';
+}
+?>
+</div>
+</body>
+</html>
+
diff --git a/For Weekly Test/tricode/networkResult.php b/For Weekly Test/tricode/networkResult.php
new file mode 100644
index 0000000..512fe86
--- /dev/null
+++ b/For Weekly Test/tricode/networkResult.php
@@ -0,0 +1,307 @@
+<?php
+ /* CAT:Drawing */
+
+ /* pChart library inclusions */
+ include("class/pData.class.php");
+
+ include("class/pDraw.class.php");
+ include("class/pImage.class.php");
+
+ include("class/pSurface.class.php");
+ //test case php defined for defining the colors and what's OK and what's wrong!
+ include 'testCase.php';
+
+ //Triangle function used for defining a triangle, used later to draw a triangle polygon!
+ function Triangle($x,$y)
+ {
+ $Bx = $x - 7;
+ $By = $y + 18;
+ $Cx = $x + 7;
+ $Cy = $y + 18;
+ return array($x,$y,$Bx,$By,$Cx,$Cy);
+ }
+
+ /* Create and populate the pData object */
+ $MyData = new pData();
+ $MyData->addPoints(array($GSMINTPercent,$GSMEXTPercent,$SIPPercent,$UNISIPPercent,$LANDLINEPercent),"Hits");
+ $MyData->setAxisName(0,"Network operability");
+ $MyData->addPoints(array("GSM University","GSM External","SIP","Uni.Tel.network","Landline"),"Networks");
+ $MyData->setSerieDescription("Networks","Networks");
+ $MyData->setAbscissa("Networks");
+
+
+ /* Create the pChart object */
+ $myPicture = new pImage(700,430,$MyData);
+
+ /* Draw the background */
+ $Settings = array("R"=>170, "G"=>183, "B"=>87, "Dash"=>1, "DashR"=>190, "DashG"=>203, "DashB"=>107);
+// $myPicture->drawFilledRectangle(0,0,700,230,$Settings);
+
+ /* Overlay with a gradient */
+ $Settings = array("StartR"=>219, "StartG"=>231, "StartB"=>139, "EndR"=>1, "EndG"=>138, "EndB"=>68, "Alpha"=>50);
+ $myPicture->drawGradientArea(0,0,700,430,DIRECTION_VERTICAL,$Settings);
+ $myPicture->drawGradientArea(0,0,700,20,DIRECTION_VERTICAL,array("StartR"=>0,"StartG"=>0,"StartB"=>0,"EndR"=>50,"EndG"=>50,"EndB"=>50,"Alpha"=>80));
+
+ /* Add a border to the picture */
+ $myPicture->drawRectangle(0,0,699,429,array("R"=>0,"G"=>0,"B"=>0));
+
+ /* Write the picture title */
+ $myPicture->setFontProperties(array("FontName"=>"fonts/Silkscreen.ttf","FontSize"=>6));
+ $myPicture->drawText(10,13,"Network Test Results - UNI FREIBURG",array("R"=>255,"G"=>255,"B"=>255));
+
+
+
+ //CONNECTIONS
+ /* BTS PICTURE INTERNAL CONNECTIONS */
+ $myPicture->drawLine(80,170,185,230,$BTS1PING); //BTS1 PING
+ $myPicture->drawLine(75,225,185,225,$BTS2PING); //BTS2 PING
+ $myPicture->drawLine(75,288,185,220,$BTS2PING); //BTS3 PING
+ /*GSMBOX LINES */
+ $myPicture->drawLine(181,65,299,150); //BTS3 PING
+ $myPicture->drawLine(250,65,308,150); //BTS3 PING
+ $myPicture->drawLine(347,65,309,150); //BTS3 PING
+ $myPicture->drawLine(410,70,316,150); //BTS3 PING
+
+ //Arrow for GSM-Box
+ $arrowSettings = array("FillR"=>2.5,"FillG"=>2.5,"FillB"=>2.5,"Ticks"=>1);
+ $myPicture->drawArrow(303,209,303,161,$arrowSettings);
+
+ //Arrow for Landline
+ $arrowSettings = array("FillR"=>2.5,"FillG"=>2.5,"FillB"=>2.5,"Ticks"=>1);
+ $myPicture->drawArrow(313,210,393,171,$arrowSettings);
+
+ //Arrow for University telephone network
+ $arrowSettings = array("FillR"=>2.5,"FillG"=>2.5,"FillB"=>2.5,"Ticks"=>1, "TwoHeads"=>TRUE);
+ $myPicture->drawArrow(303,298,303,239,$arrowSettings);
+
+ //SIP
+ $arrowSettings = array("FillR"=>2.5,"FillG"=>2.5,"FillB"=>2.5,"Ticks"=>1, "TwoHeads"=>TRUE);
+ $myPicture->drawArrow(316,220,393,220,$arrowSettings);
+ /* Write some text */
+ $myPicture->setFontProperties(array("FontName"=>"fonts/verdana.ttf","FontSize"=>7));
+ $TextSettings = array("BoxRounded"=>TRUE,"R"=>0,"G"=>0,"B"=>0,"Angle"=>0,"FontSize"=>7);
+ $myPicture->drawText(346,218,"SIP",$TextSettings);
+
+ //IAX
+ $arrowSettings = array("FillR"=>2.5,"FillG"=>2.5,"FillB"=>2.5,"Ticks"=>1, "TwoHeads"=>TRUE);
+ $myPicture->drawArrow(192,220,297,220,$arrowSettings);
+ /* Write some text */
+ $myPicture->setFontProperties(array("FontName"=>"fonts/verdana.ttf","FontSize"=>7));
+ $TextSettings = array("BoxRounded"=>TRUE,"R"=>0,"G"=>0,"B"=>0,"Angle"=>0,"FontSize"=>7);
+ $myPicture->drawText(235,218,"IAX",$TextSettings);
+ //######################################
+
+ //BTS1
+ $Points = Triangle(74,155);
+ $myPicture->drawPolygon($Points, $BTS1COL);
+ /* Write some text */
+ $myPicture->setFontProperties(array("FontName"=>"fonts/verdana.ttf","FontSize"=>7));
+ $TextSettings = array("DrawBox"=>TRUE,"BoxRounded"=>TRUE,"R"=>0,"G"=>0,"B"=>0,"Angle"=>0,"FontSize"=>7);
+ $myPicture->drawText(10,169,"nanoBTS0",$TextSettings);
+ //##################################
+
+ //BTS2
+ $Points = Triangle(74,215);
+ $myPicture->drawPolygon($Points, $BTS2COL);
+ /* Write some text */
+ $myPicture->setFontProperties(array("FontName"=>"fonts/verdana.ttf","FontSize"=>7));
+ $TextSettings = array("DrawBox"=>TRUE,"BoxRounded"=>TRUE,"R"=>0,"G"=>0,"B"=>0,"Angle"=>0,"FontSize"=>7);
+ $myPicture->drawText(10,229,"nanoBTS1",$TextSettings);
+ //###################################
+
+ //BTS3
+ $Points = Triangle(74,275);
+ $myPicture->drawPolygon($Points, $BTS3COL);
+ /* Write some text */
+ $myPicture->setFontProperties(array("FontName"=>"fonts/verdana.ttf","FontSize"=>7));
+ $TextSettings = array("DrawBox"=>TRUE,"BoxRounded"=>TRUE,"R"=>0,"G"=>0,"B"=>0,"Angle"=>0,"FontSize"=>7);
+ $myPicture->drawText(10,289,"nanoBTS3",$TextSettings);
+ //###################################
+
+
+
+ //LsfKs-Asterisk
+ /* Turn on shadow computing */
+ $myPicture->setShadow(TRUE,array("X"=>1,"Y"=>1,"R"=>0,"G"=>0,"B"=>0,"Alpha"=>20));
+ /* Draw a PNG object */
+ $myPicture->drawFromPNG(295,210,$LSFKSCOL);
+ /* Write some text */
+ $myPicture->setFontProperties(array("FontName"=>"fonts/verdana.ttf","FontSize"=>7));
+ $TextSettings = array("DrawBox"=>TRUE,"BoxRounded"=>TRUE,"R"=>0,"G"=>0,"B"=>0,"Angle"=>0,"FontSize"=>7);
+ $myPicture->drawText(270,257," LsfKs-Asterisk",$TextSettings);
+ //###############################
+
+
+ //Open BSC
+ /* Turn on shadow computing */
+ $myPicture->setShadow(TRUE,array("X"=>1,"Y"=>1,"R"=>0,"G"=>0,"B"=>0,"Alpha"=>20));
+ /* Draw a PNG object */
+ $myPicture->drawFromPNG(171,210,$GSMINTCOL);
+ /* Write some text */
+ $myPicture->setFontProperties(array("FontName"=>"fonts/verdana.ttf","FontSize"=>7));
+ $TextSettings = array("DrawBox"=>TRUE,"BoxRounded"=>TRUE,"R"=>0,"G"=>0,"B"=>0,"Angle"=>0,"FontSize"=>7);
+ $myPicture->drawText(155,275," OpenBSC \r\n LCR \r\n Asterisk",$TextSettings);
+ //###############################
+
+
+ //E-plus
+ /* Turn on shadow computing */
+ $myPicture->setShadow(TRUE,array("X"=>1,"Y"=>1,"R"=>0,"G"=>0,"B"=>0,"Alpha"=>20));
+ /* Draw a PNG object */
+ $myPicture->drawFromPNG(171,50,$GSMEECOL);
+ /* Write some text */
+ $myPicture->setFontProperties(array("FontName"=>"fonts/verdana.ttf","FontSize"=>7));
+ $TextSettings = array("DrawBox"=>TRUE,"BoxRounded"=>TRUE,"R"=>0,"G"=>0,"B"=>0,"Angle"=>0,"FontSize"=>7);
+ $myPicture->drawText(171,40,"E-Plus",$TextSettings);
+ //###############################
+
+
+ //Vodaphone
+ /* Turn on shadow computing */
+ $myPicture->setShadow(TRUE,array("X"=>1,"Y"=>1,"R"=>0,"G"=>0,"B"=>0,"Alpha"=>20));
+ /* Draw a PNG object */
+ $myPicture->drawFromPNG(231,50,$GSMEVCOL);
+ /* Write some text */
+ $myPicture->setFontProperties(array("FontName"=>"fonts/verdana.ttf","FontSize"=>7));
+ $TextSettings = array("DrawBox"=>TRUE,"BoxRounded"=>TRUE,"R"=>0,"G"=>0,"B"=>0,"Angle"=>0,"FontSize"=>7);
+ $myPicture->drawText(218,40,"Vodafone",$TextSettings);
+ //###############################
+
+
+ //T-mobile
+ /* Turn on shadow computing */
+ $myPicture->setShadow(TRUE,array("X"=>1,"Y"=>1,"R"=>0,"G"=>0,"B"=>0,"Alpha"=>20));
+ /* Draw a PNG object */
+ $myPicture->drawFromPNG(336,50,$GSMETCOL);
+ /* Write some text */
+ $myPicture->setFontProperties(array("FontName"=>"fonts/verdana.ttf","FontSize"=>7));
+ $TextSettings = array("DrawBox"=>TRUE,"BoxRounded"=>TRUE,"R"=>0,"G"=>0,"B"=>0,"Angle"=>0,"FontSize"=>7);
+ $myPicture->drawText(330,40,"T-Mobile",$TextSettings);
+ //###############################
+
+
+ //O2
+ /* Turn on shadow computing */
+ $myPicture->setShadow(TRUE,array("X"=>1,"Y"=>1,"R"=>0,"G"=>0,"B"=>0,"Alpha"=>20));
+ /* Draw a PNG object */
+ $myPicture->drawFromPNG(396,50,$GSMEOCOL);
+ /* Write some text */
+ $myPicture->setFontProperties(array("FontName"=>"fonts/verdana.ttf","FontSize"=>7));
+ $TextSettings = array("DrawBox"=>TRUE,"BoxRounded"=>TRUE,"R"=>0,"G"=>0,"B"=>0,"Angle"=>0,"FontSize"=>7);
+ $myPicture->drawText(404,40,"02",$TextSettings);
+ //###############################
+
+
+ //GSMBOX
+ /* Turn on shadow computing */
+ $myPicture->setShadow(TRUE,array("X"=>1,"Y"=>1,"R"=>0,"G"=>0,"B"=>0,"Alpha"=>20));
+ /* Draw a PNG object */
+ $myPicture->drawFromPNG(293,140,$GSMEXTCOL);
+ /* Write some text */
+ $myPicture->setFontProperties(array("FontName"=>"fonts/verdana.ttf","FontSize"=>7));
+ $TextSettings = array("DrawBox"=>TRUE,"BoxRounded"=>TRUE,"R"=>0,"G"=>0,"B"=>0,"Angle"=>0,"FontSize"=>7);
+ $myPicture->drawText(238,157,"GSM-Box",$TextSettings);
+ //###############################
+
+
+ //LANDLINE
+ /* Turn on shadow computing */
+ $myPicture->setShadow(TRUE,array("X"=>1,"Y"=>1,"R"=>0,"G"=>0,"B"=>0,"Alpha"=>20));
+ /* Draw a PNG object */
+ $myPicture->drawFromPNG(393,147,$LANDLINECOL);
+ /* Write some text */
+ $myPicture->setFontProperties(array("FontName"=>"fonts/verdana.ttf","FontSize"=>7));
+ $TextSettings = array("DrawBox"=>TRUE,"BoxRounded"=>TRUE,"R"=>0,"G"=>0,"B"=>0,"Angle"=>0,"FontSize"=>7);
+ $myPicture->drawText(388,137,"Landline",$TextSettings);
+ //###############################
+
+
+ //University SIP
+ /* Turn on shadow computing */
+ $myPicture->setShadow(TRUE,array("X"=>1,"Y"=>1,"R"=>0,"G"=>0,"B"=>0,"Alpha"=>20));
+ /* Draw a PNG object */
+ $myPicture->drawFromPNG(283,297,$UNISIPCOL);
+ /* Write some text */
+ $myPicture->setFontProperties(array("FontName"=>"fonts/verdana.ttf","FontSize"=>7));
+ $TextSettings = array("DrawBox"=>TRUE,"BoxRounded"=>TRUE,"R"=>0,"G"=>0,"B"=>0,"Angle"=>0,"FontSize"=>7);
+ $myPicture->drawText(238,365,"University telephone network",$TextSettings);
+ //###############################
+
+
+ //SIP
+ /* Turn on shadow computing */
+ $myPicture->setShadow(TRUE,array("X"=>1,"Y"=>1,"R"=>0,"G"=>0,"B"=>0,"Alpha"=>20));
+ /* Draw a PNG object */
+ $myPicture->drawFromPNG(393,208,$SIPCOL);
+ /* Write some text */
+ $myPicture->setFontProperties(array("FontName"=>"fonts/verdana.ttf","FontSize"=>7));
+ $TextSettings = array("DrawBox"=>TRUE,"BoxRounded"=>TRUE,"R"=>0,"G"=>0,"B"=>0,"Angle"=>0,"FontSize"=>7);
+ $myPicture->drawText(399,256,"SIP",$TextSettings);
+ //###############################
+
+ //PING RESULTS
+ //START ############################################
+ $myPicture->setGraphArea(530,280,660,290);
+
+ // Create the surface object
+ $mySurface = new pSurface($myPicture);
+
+ // Set the grid size
+ $mySurface->setGrid(4,0);
+
+ $mySurface->writeXLabels(array("Angle"=>45,"Labels"=>array("SIP","Landline","Uni. Telephone","nanoBTS 1","nanoBTS 2")));
+ $mySurface->writeYLabels(array("Labels"=>array("Ping")));
+
+ $Palette = array(1=>array("R"=>0,"G"=>255,"B"=>0, "Alpha"=>40),
+ 0=>array("R"=>255,"G"=>0,"B"=>1, "Alpha"=>40));
+
+ $mySurface->addPoint(0,0,$SIPP);
+ $mySurface->addPoint(1,0,$LANDLINEP);
+ $mySurface->addPoint(2,0,$UNISIPP);
+ $mySurface->addPoint(3,0,$NANOBTS1P);
+ $mySurface->addPoint(4,0,$NANOBTS2P);
+
+ // Draw the surface chart
+ $mySurface->drawSurface(array("Border"=>TRUE,"Surrounding"=>40,"Palette"=>$Palette));
+
+
+ //A BIT OF STATISTICS
+ /* Draw the chart scale */
+ $myPicture->setGraphArea(520,50,685,220);
+ $AxisBoundaries = array(0=>array("Min"=>0,"Max"=>100));
+
+ $myPicture->drawScale(array("CycleBackground"=>TRUE,"DrawSubTicks"=>TRUE,"GridR"=>0,"GridG"=>0,"GridB"=>0,"GridAlpha"=>10,"Pos"=>SCALE_POS_TOPBOTTOM,"Mode"=>SCALE_MODE_MANUAL,"ManualScale"=>$AxisBoundaries));
+
+ /* Turn on shadow computing */
+ $myPicture->setShadow(TRUE,array("X"=>1,"Y"=>1,"R"=>0,"G"=>0,"B"=>0,"Alpha"=>10));
+
+ /* Create the per bar palette */
+ $Palette = array("0"=>array("R"=>188,"G"=>224,"B"=>46,"Alpha"=>100),
+ "1"=>array("R"=>224,"G"=>100,"B"=>46,"Alpha"=>100),
+ "2"=>array("R"=>224,"G"=>214,"B"=>46,"Alpha"=>100),
+ "3"=>array("R"=>46,"G"=>151,"B"=>224,"Alpha"=>100),
+ "4"=>array("R"=>224,"G"=>176,"B"=>46,"Alpha"=>100));
+
+
+/* $Palette = array("1"=>array("R"=>91,"G"=>184,"B"=>202,"Alpha"=>100),
+ "2"=>array("R"=>166,"G"=>218,"B"=>215,"Alpha"=>100),
+ "3"=>array("R"=>223,"G"=>227,"B"=>203,"Alpha"=>100),
+ "0"=>array("R"=>114,"G"=>176,"B"=>180,"Alpha"=>100),
+ "4"=>array("R"=>241,"G"=>233,"B"=>214,"Alpha"=>100));
+*/
+ /* Draw the chart */
+ $myPicture->drawBarChart(array("DisplayPos"=>LABEL_POS_INSIDE,"DisplayValues"=>TRUE,"Rounded"=>TRUE,"Surrounding"=>30,"OverrideColors"=>$Palette));
+ //############################################STATISTICS
+
+ //DATE AND TEST NUMBER
+ /* Write some text */
+ $myPicture->setFontProperties(array("FontName"=>"fonts/verdana.ttf","FontSize"=>7));
+ $TextSettings = array("BoxRounded"=>TRUE,"R"=>255,"G"=>255,"B"=>255,"Angle"=>0,"FontSize"=>9);
+ $myPicture->drawText(460,425,"Task #:32432 07.09.2011 21:19:00",$TextSettings);
+ //###########################################################
+
+
+
+ /* Render the picture (choose the best way) */
+ $myPicture->autoOutput("example.drawFilledCircle.png");
+?>
diff --git a/For Weekly Test/tricode/post.php b/For Weekly Test/tricode/post.php
new file mode 100644
index 0000000..56d0c24
--- /dev/null
+++ b/For Weekly Test/tricode/post.php
@@ -0,0 +1,470 @@
+<?
+$sipgsmrz1 = $_REQUEST["sip_gsmrz1"]; //SIP to GSMRZ1
+$sipgsmrz2 = $_REQUEST["sip_gsmrz2"]; //SIP to GSMRZ2
+$sipgsmrz3 = $_REQUEST["sip_gsmrz3"]; //SIP to GSMRZ3
+
+$sipland = $_REQUEST["sip_landln"]; //SIP to landline
+$sipuniv = $_REQUEST["sip_sipuniv"]; //SIP to University
+
+$gsmrzsip1 = $_REQUEST["gsmrz1_sip"]; //GSMRZ1 to SIP
+$gsmrzsip2 = $_REQUEST["gsmrz2_sip"]; //GSMRZ2 to SIP
+$gsmrzsip3 = $_REQUEST["gsmrz3_sip"]; //GSMRZ3 to SIP
+
+
+$gsm2gsm12 = $_REQUEST["gsmrz1_gsmrz2"]; //GSMRZ1 to GSMRZ2
+$gsm2gsm13 = $_REQUEST["gsmrz1_gsmrz3"]; //GSMRZ1 to GSMRZ3
+$gsm2gsm23 = $_REQUEST["gsmrz2_gsmrz3"]; //GSMRZ2 to GSMRZ3
+
+$landsip = $_REQUEST["landline_sip"]; //Landline to SIP
+
+$landgsmrz1 = $_REQUEST["landline_gsmrz1"]; //Landline to GSMRZ1
+$landgsmrz2 = $_REQUEST["landline_gsmrz2"]; //Landline to GSMRZ1
+$landgsmrz3 = $_REQUEST["landline_gsmrz3"]; //Landline to GSMRZ1
+
+//Add allso for external GSM
+$gsmrz1gsmee = $_REQUEST["gsmrz1_gsmee"]; //GSMRZ1 to E-Plus
+$gsmrz1gsmev = $_REQUEST["gsmrz1_gsmev"]; //GSMRZ1 to E-Plus
+$gsmrz1gsmet = $_REQUEST["gsmrz1_gsmet"]; //GSMRZ1 to E-Plus
+$gsmrz1gsmeo = $_REQUEST["gsmrz1_gsmeo"]; //GSMRZ1 to E-Plus
+
+
+$gsmrz2gsmee = $_REQUEST["gsmrz2_gsmee"]; //GSMRZ2 to E-Plus
+$gsmrz2gsmev = $_REQUEST["gsmrz2_gsmev"]; //GSMRZ2 to E-Plus
+$gsmrz2gsmet = $_REQUEST["gsmrz2_gsmet"]; //GSMRZ2 to E-Plus
+$gsmrz2gsmeo = $_REQUEST["gsmrz2_gsmeo"]; //GSMRZ2 to E-Plus
+
+
+$gsmrz3gsmee = $_REQUEST["gsmrz3_gsmee"]; //GSMRZ3 to E-Plus
+$gsmrz3gsmev = $_REQUEST["gsmrz3_gsmev"]; //GSMRZ3 to E-Plus
+$gsmrz3gsmet = $_REQUEST["gsmrz3_gsmet"]; //GSMRZ3 to E-Plus
+$gsmrz3gsmeo = $_REQUEST["gsmrz3_gsmeo"]; //GSMRZ3 to E-Plus
+
+
+$unisipgsmee = $_REQUEST["unisip_gsmee"]; //GSMRZ3 to E-Plus
+$unisipgsmev = $_REQUEST["unisip_gsmev"]; //GSMRZ3 to E-Plus
+$unisipgsmet = $_REQUEST["unisip_gsmet"]; //GSMRZ3 to E-Plus
+$unisipgsmeo = $_REQUEST["unisip_gsmeo"]; //GSMRZ3 to E-Plus
+//############################################################
+$taskNo = getNewTaskNo();
+$errorAdding = 0;
+$taskAmount = 0;
+
+/*function insertTask($me,$mb,$md)
+{
+ echo $me.$mb.$md;
+ return 1;
+}*/
+
+if($sipgsmrz1 == 'on')
+{
+ $taskAdded = insertTask($taskNo,'sip','GSMRZ1');
+ if($taskAdded != 1)
+ {
+ $errorAdding = 1;
+ }
+ if($taskAdded == 1)
+ {
+ $taskAmount++;
+ }
+}
+
+if($sipgsmrz2 == 'on')
+{
+ $taskAdded = insertTask($taskNo,'sip','GSMRZ2');
+ if($taskAdded != 1)
+ {
+ $errorAdding = 1;
+ }
+ if($taskAdded == 1)
+ {
+ $taskAmount++;
+ }
+}
+
+if($sipgsmrz3 == 'on')
+{
+ $taskAdded = insertTask($taskNo,'sip','GSMRZ3');
+ if($taskAdded != 1)
+ {
+ $errorAdding = 1;
+ }
+ if($taskAdded == 1)
+ {
+ $taskAmount++;
+ }
+}
+
+if($gsmrzsip1 == 'on')
+{
+ $taskAdded = insertTask($taskNo,'GSMRZ1','sip');
+ if($taskAdded != 1)
+ {
+ $errorAdding = 1;
+ }
+ if($taskAdded == 1)
+ {
+ $taskAmount++;
+ }
+}
+
+if($gsmrzsip2 == 'on')
+{
+ $taskAdded = insertTask($taskNo,'GSMRZ2','sip');
+ if($taskAdded != 1)
+ {
+ $errorAdding = 1;
+ }
+ if($taskAdded == 1)
+ {
+ $taskAmount++;
+ }
+}
+
+if($gsmrzsip3 == 'on')
+{
+ $taskAdded = insertTask($taskNo,'GSMRZ3','sip');
+ if($taskAdded != 1)
+ {
+ $errorAdding = 1;
+ }
+ if($taskAdded == 1)
+ {
+ $taskAmount++;
+ }
+}
+
+if($sipland == 'on')
+{
+ $taskAdded = insertTask($taskNo,'sip','landline');
+ if($taskAdded != 1)
+ {
+ $errorAdding = 1;
+ }
+ if($taskAdded == 1)
+ {
+ $taskAmount++;
+ }
+}
+
+if($sipuniv == 'on')
+{
+ $taskAdded = insertTask($taskNo,'sip','unisip');
+ if($taskAdded != 1)
+ {
+ $errorAdding = 1;
+ }
+ if($taskAdded == 1)
+ {
+ $taskAmount++;
+ }
+}
+
+if($gsm2gsm12 == 'on')
+{
+ $taskAdded = insertTask($taskNo,'GSMRZ1','GSMRZ2');
+ if($taskAdded != 1)
+ {
+ $errorAdding = 1;
+ }
+ if($taskAdded == 1)
+ {
+ $taskAmount++;
+ }
+}
+
+if($gsm2gsm13 == 'on')
+{
+ $taskAdded = insertTask($taskNo,'GSMRZ1','GSMRZ3');
+ if($taskAdded != 1)
+ {
+ $errorAdding = 1;
+ }
+ if($taskAdded == 1)
+ {
+ $taskAmount++;
+ }
+}
+
+if($gsm2gsm23 == 'on')
+{
+ $taskAdded = insertTask($taskNo,'GSMRZ2','GSMRZ3');
+ if($taskAdded != 1)
+ {
+ $errorAdding = 1;
+ }
+ if($taskAdded == 1)
+ {
+ $taskAmount++;
+ }
+}
+
+if($landsip == 'on')
+{
+ $taskAdded = insertTask($taskNo,'landline','sip');
+ if($taskAdded != 1)
+ {
+ $errorAdding = 1;
+ }
+ if($taskAdded == 1)
+ {
+ $taskAmount++;
+ }
+}
+
+if($landgsmrz1 == 'on')
+{
+ $taskAdded = insertTask($taskNo,'landline','GSMRZ1');
+ if($taskAdded != 1)
+ {
+ $errorAdding = 1;
+ }
+ if($taskAdded == 1)
+ {
+ $taskAmount++;
+ }
+}
+
+if($landgsmrz2 == 'on')
+{
+ $taskAdded = insertTask($taskNo,'landline','GSMRZ2');
+ if($taskAdded != 1)
+ {
+ $errorAdding = 1;
+ }
+ if($taskAdded == 1)
+ {
+ $taskAmount++;
+ }
+}
+
+if($landgsmrz3 == 'on')
+{
+ $taskAdded = insertTask($taskNo,'landline','GSMRZ3');
+ if($taskAdded != 1)
+ {
+ $errorAdding = 1;
+ }
+ if($taskAdded == 1)
+ {
+ $taskAmount++;
+ }
+}
+
+
+
+if($gsmrz1gsmee == 'on')
+{
+ $taskAdded = insertTask($taskNo,'GSMRZ1','GSMExt.Eplus');
+ if($taskAdded != 1)
+ {
+ $errorAdding = 1;
+ }
+ if($taskAdded == 1)
+ {
+ $taskAmount++;
+ }
+}
+
+if($gsmrz1gsmev == 'on')
+{
+ $taskAdded = insertTask($taskNo,'GSMRZ1','GSMExt.Voda');
+ if($taskAdded != 1)
+ {
+ $errorAdding = 1;
+ }
+ if($taskAdded == 1)
+ {
+ $taskAmount++;
+ }
+}
+
+if($gsmrz1gsmet == 'on')
+{
+ $taskAdded = insertTask($taskNo,'GSMRZ1','GSMExt.Tm');
+ if($taskAdded != 1)
+ {
+ $errorAdding = 1;
+ }
+ if($taskAdded == 1)
+ {
+ $taskAmount++;
+ }
+}
+
+if($gsmrz1gsmeo == 'on')
+{
+ $taskAdded = insertTask($taskNo,'GSMRZ1','GSMExt.O2');
+ if($taskAdded != 1)
+ {
+ $errorAdding = 1;
+ }
+ if($taskAdded == 1)
+ {
+ $taskAmount++;
+ }
+}
+
+
+
+if($gsmrz2gsmee == 'on')
+{
+ $taskAdded = insertTask($taskNo,'GSMRZ2','GSMExt.Eplus');
+ if($taskAdded != 1)
+ {
+ $errorAdding = 1;
+ }
+ if($taskAdded == 1)
+ {
+ $taskAmount++;
+ }
+}
+
+if($gsmrz2gsmev == 'on')
+{
+ $taskAdded = insertTask($taskNo,'GSMRZ2','GSMExt.Voda');
+ if($taskAdded != 1)
+ {
+ $errorAdding = 1;
+ }
+ if($taskAdded == 1)
+ {
+ $taskAmount++;
+ }
+}
+
+if($gsmrz2gsmet == 'on')
+{
+ $taskAdded = insertTask($taskNo,'GSMRZ2','GSMExt.Tm');
+ if($taskAdded != 1)
+ {
+ $errorAdding = 1;
+ }
+ if($taskAdded == 1)
+ {
+ $taskAmount++;
+ }
+}
+
+if($gsmrz2gsmeo == 'on')
+{
+ $taskAdded = insertTask($taskNo,'GSMRZ2','GSMExt.O2');
+ if($taskAdded != 1)
+ {
+ $errorAdding = 1;
+ }
+ if($taskAdded == 1)
+ {
+ $taskAmount++;
+ }
+}
+
+
+
+if($gsmrz3gsmee == 'on')
+{
+ $taskAdded = insertTask($taskNo,'GSMRZ3','GSMExt.Eplus');
+ if($taskAdded != 1)
+ {
+ $errorAdding = 1;
+ }
+ if($taskAdded == 1)
+ {
+ $taskAmount++;
+ }
+}
+
+if($gsmrz3gsmev == 'on')
+{
+ $taskAdded = insertTask($taskNo,'GSMRZ3','GSMExt.Voda');
+ if($taskAdded != 1)
+ {
+ $errorAdding = 1;
+ }
+ if($taskAdded == 1)
+ {
+ $taskAmount++;
+ }
+}
+
+if($gsmrz3gsmet == 'on')
+{
+ $taskAdded = insertTask($taskNo,'GSMRZ3','GSMExt.Tm');
+ if($taskAdded != 1)
+ {
+ $errorAdding = 1;
+ }
+ if($taskAdded == 1)
+ {
+ $taskAmount++;
+ }
+}
+
+if($gsmrz3gsmeo == 'on')
+{
+ $taskAdded = insertTask($taskNo,'GSMRZ3','GSMExt.O2');
+ if($taskAdded != 1)
+ {
+ $errorAdding = 1;
+ }
+ if($taskAdded == 1)
+ {
+ $taskAmount++;
+ }
+}
+
+
+
+
+if($unisipgsmee == 'on')
+{
+ $taskAdded = insertTask($taskNo,'unisip','GSMExt.Eplus');
+ if($taskAdded != 1)
+ {
+ $errorAdding = 1;
+ }
+ if($taskAdded == 1)
+ {
+ $taskAmount++;
+ }
+}
+
+if($unisipgsmev == 'on')
+{
+ $taskAdded = insertTask($taskNo,'unisip','GSMExt.Voda');
+ if($taskAdded != 1)
+ {
+ $errorAdding = 1;
+ }
+ if($taskAdded == 1)
+ {
+ $taskAmount++;
+ }
+}
+
+if($unisipgsmet == 'on')
+{
+ $taskAdded = insertTask($taskNo,'unisip','GSMExt.Tm');
+ if($taskAdded != 1)
+ {
+ $errorAdding = 1;
+ }
+ if($taskAdded == 1)
+ {
+ $taskAmount++;
+ }
+}
+
+if($unisipgsmeo == 'on')
+{
+ $taskAdded = insertTask($taskNo,'unisip','GSMExt.O2');
+ if($taskAdded != 1)
+ {
+ $errorAdding = 1;
+ }
+ if($taskAdded == 1)
+ {
+ $taskAmount++;
+ }
+}
+
+?>
diff --git a/For Weekly Test/tricode/script.sh b/For Weekly Test/tricode/script.sh
new file mode 100755
index 0000000..00c0279
--- /dev/null
+++ b/For Weekly Test/tricode/script.sh
@@ -0,0 +1 @@
+gnome-terminal
diff --git a/For Weekly Test/tricode/serialTest.py b/For Weekly Test/tricode/serialTest.py
new file mode 100755
index 0000000..c39c80d
--- /dev/null
+++ b/For Weekly Test/tricode/serialTest.py
@@ -0,0 +1,38 @@
+import time
+from serial import *
+
+# configure the serial connections (the parameters differs on the device you are connecting to)
+ser = Serial(
+ port='/dev/ttyUSB1',
+ baudrate=19200,
+ bytesize=EIGHTBITS,
+ parity=PARITY_NONE,
+ stopbits=STOPBITS_ONE
+)
+
+ser.open()
+ser.isOpen()
+
+print 'Enter your commands below.\r\nInsert "exit" to leave the application.'
+
+input=1
+while 1 :
+ # get keyboard input
+ input = raw_input(">> ")
+ # Python 3 users
+ # input = input(">> ")
+ if input == 'exit':
+ ser.close()
+ exit()
+ else:
+ # send the character to the device
+ # (note that I happend a \r\n carriage return and line feed to the characters - this is requested by my device)
+ ser.write(input + '\r\n')
+ out = ''
+ # let's wait one second before reading output (let's give device time to answer)
+ time.sleep(1)
+ while ser.inWaiting() > 0:
+ out += ser.read(1)
+
+ if out != '':
+ print ">>" + out
diff --git a/For Weekly Test/tricode/sshtest.py b/For Weekly Test/tricode/sshtest.py
new file mode 100755
index 0000000..f18139e
--- /dev/null
+++ b/For Weekly Test/tricode/sshtest.py
@@ -0,0 +1,15 @@
+import sys
+import os
+import subprocess
+import SSHTunnelBox1Class
+import SSHTunnelBox2Class
+import ClientClass
+from time import sleep
+
+portDest = 46000#should be 9
+box2 = SSHTunnelBox2Class.SSHTunneling(portDest, 50008, '132.230.4.67', 'lsfks', 'r')#ip??
+print box2.startTunneling()
+#sleep(2)
+receiver = ClientClass.Connection('localhost', portDest)
+print receiver.connect()
+box2.killTunneling()
diff --git a/For Weekly Test/tricode/startSoftware.py b/For Weekly Test/tricode/startSoftware.py
new file mode 100644
index 0000000..bf36e0f
--- /dev/null
+++ b/For Weekly Test/tricode/startSoftware.py
@@ -0,0 +1,14 @@
+import ServerClass
+import subprocess
+
+while 1:
+ server = ServerClass.ServerHandler(34600)
+ tried = server.openSocket()
+
+ test = server.receiveData(2)
+ if test == 'START APP':
+ print 'start'
+ subprocess.Popen(args=['gnome-terminal','--command= python gsmselftest-website2.py'])
+ #print server.closeConnection()
+ del server
+
diff --git a/For Weekly Test/tricode/startTest.php b/For Weekly Test/tricode/startTest.php
new file mode 100644
index 0000000..abfa812
--- /dev/null
+++ b/For Weekly Test/tricode/startTest.php
@@ -0,0 +1,438 @@
+<html>
+<head>
+<!--ADD HERE ALL THE NEEDED META DATA -->
+<title>Uni-Freiburg Network test</title>
+<link rel="stylesheet" href="css/formCSS.css" type="text/css" media="screen">
+<link rel="stylesheet" href="css/tooltip.css" type="text/css" media="screen">
+</head>
+
+<body>
+<div>
+Please select the type of the test you would like to perform or manually choose your tests! Then please press the submit button!
+</div>
+<div>
+<form>
+ <a class="tooltip" href="#">
+ <input type=button value="Simple test" onClick="simpleTest()">
+ <span class="custom warning">
+ <img src="css/Info.png" alt="Warning" height="48" width="48" />
+ <em>Simple test</em>
+ Press simple test if you want to test the network for</span>
+ </a>
+
+ <a class="tooltip" href="#">
+ <input type=button value="Smart test" onClick="smartTest()">
+ <span class="custom warning">
+ <img src="css/Info.png" alt="Warning" height="48" width="48" />
+ <em>Smart test</em>
+ This is just an example of what you can do using a CSS tooltip, feel free to get creative and produce your own!</span>
+ </a>
+
+ <a class="tooltip" href="#">
+ <input type=button value="Full test" onClick="fullTest()">
+ <span class="custom warning">
+ <img src="css/Info.png" alt="Warning" height="48" width="48" />
+ <em>Full test</em>
+ Press full test if you want to test every part of the university network. To execute this test the highest amount of time will be required, however this test produces the highest amount of information!</span>
+ </a>
+
+ <a class="tooltip" href="#">
+ <input type=button value="Deselect all values" onClick="deselectAll()">
+ <span class="custom warning">
+ <img src="css/Info.png" alt="Warning" height="48" width="48" />
+ <em>Deselect all</em>
+ Press deselect all if you want to deselect all the values you have selected to be executed for the test!</span>
+ </a>
+</form>
+</div>
+<div class='section form'>
+<form name="testForm" form action="mutexTry.php" method="POST">
+ <div class='leftcol'>
+ <label><input type="checkbox" name='sip_gsmrz1'> SIP to RZ-GSM 1</label>
+ <label><input type="checkbox" name="sip_gsmrz2"> SIP to RZ-GSM 2</label>
+ <label><input type="checkbox" name="sip_gsmrz3"> SIP to RZ-GSM 3</label>
+
+ <label><input type="checkbox" name="sip_landln"> SIP to Landline</label>
+ <label><input type="checkbox" name="sip_sipuniv"> SIP to Uni.telephone</label>
+
+
+ <label><input type="checkbox" name="gsmrz1_sip"> RZ-GSM 1 to SIP</label>
+ <label><input type="checkbox" name="gsmrz2_sip"> RZ-GSM 2 to SIP</label>
+ <label><input type="checkbox" name="gsmrz3_sip"> RZ-GSM 3 to SIP</label>
+
+ <label><input type="checkbox" name="gsmrz1_gsmrz2"> RZ-GSM 1 to RZ-GSM 2</label>
+ <label><input type="checkbox" name="gsmrz1_gsmrz3"> RZ-GSM 1 to RZ-GSM 3</label>
+ <label><input type="checkbox" name="gsmrz2_gsmrz3"> RZ-GSM 2 to RZ-GSM 3</label>
+
+
+ <label><input type="checkbox" name="landline_sip"> Landline to SIP </label>
+
+ <label><input type="checkbox" name="landline_gsmrz1"> Landline to RZ-GSM 1</label>
+ <label><input type="checkbox" name="landline_gsmrz2"> Landline to RZ-GSM 2</label>
+ <label><input type="checkbox" name="landline_gsmrz3"> Landline to RZ-GSM 3</label>
+
+
+ <label><input type="checkbox" name="gsmrz1_gsmee"> RZ-GSM 1 to E-Plus</label>
+ <label><input type="checkbox" name="gsmrz1_gsmev"> RZ-GSM 1 to Vodaphone</label>
+ <label><input type="checkbox" name="gsmrz1_gsmet"> RZ-GSM 1 to T-Mobile</label>
+ <label><input type="checkbox" name="gsmrz1_gsmeo"> RZ-GSM 1 to O2</label>
+
+ <label><input type="checkbox" name="gsmrz2_gsmee"> RZ-GSM 2 to E-Plus</label>
+ <label><input type="checkbox" name="gsmrz2_gsmev"> RZ-GSM 2 to Vodaphone</label>
+ <label><input type="checkbox" name="gsmrz2_gsmet"> RZ-GSM 2 to T-Mobile</label>
+ <label><input type="checkbox" name="gsmrz2_gsmeo"> RZ-GSM 2 to O2</label>
+
+ <label><input type="checkbox" name="gsmrz3_gsmee"> RZ-GSM 3 to E-Plus</label>
+ <label><input type="checkbox" name="gsmrz3_gsmev"> RZ-GSM 3 to Vodaphone</label>
+ <label><input type="checkbox" name="gsmrz3_gsmet"> RZ-GSM 3 to T-Mobile</label>
+ <label><input type="checkbox" name="gsmrz3_gsmeo"> RZ-GSM 3 to O2</label>
+
+
+ <label><input type="checkbox" name="unisip_gsmee"> Uni.telephone to E-Plus</label>
+ <label><input type="checkbox" name="unisip_gsmev"> Uni.telephone to Vodaphone</label>
+ <label><input type="checkbox" name="unisip_gsmet"> Uni.telephone to T-Mobile</label>
+ <label><input type="checkbox" name="unisip_gsmeo"> Uni.telephone to O2</label>
+
+
+
+
+ <input type=SUBMIT value="Submit">
+
+ </div>
+</form>
+</div>
+
+<script type="text/javascript" src="mootools.js"></script>
+<script type="text/javascript" src="moocheck.js"></script>
+<script type = "text/javascript">
+function simpleTest()
+{
+ document.testForm.sip_gsmrz1.checked=false
+ document.testForm.sip_gsmrz2.checked=false
+ document.testForm.sip_gsmrz3.checked=false
+
+ document.testForm.sip_landln.checked=false
+ document.testForm.sip_sipuniv.checked=false
+
+ document.testForm.gsmrz1_gsmrz2.checked=false
+ document.testForm.gsmrz1_gsmrz3.checked=false
+ document.testForm.gsmrz2_gsmrz3.checked=false
+
+ document.testForm.gsmrz1_sip.checked=false
+ document.testForm.gsmrz2_sip.checked=false
+ document.testForm.gsmrz3_sip.checked=false
+
+ document.testForm.landline_sip.checked=false
+
+ document.testForm.landline_gsmrz1.checked=false
+ document.testForm.landline_gsmrz2.checked=false
+ document.testForm.landline_gsmrz3.checked=false
+
+ document.testForm.gsmrz1_gsmee.checked=false
+ document.testForm.gsmrz1_gsmev.checked=false
+ document.testForm.gsmrz1_gsmet.checked=false
+ document.testForm.gsmrz1_gsmeo.checked=false
+
+ document.testForm.gsmrz2_gsmee.checked=false
+ document.testForm.gsmrz2_gsmev.checked=false
+ document.testForm.gsmrz2_gsmet.checked=false
+ document.testForm.gsmrz2_gsmeo.checked=false
+
+ document.testForm.gsmrz3_gsmee.checked=false
+ document.testForm.gsmrz3_gsmev.checked=false
+ document.testForm.gsmrz3_gsmet.checked=false
+ document.testForm.gsmrz3_gsmeo.checked=false
+
+
+ document.testForm.unisip_gsmee.checked=false
+ document.testForm.unisip_gsmev.checked=false
+ document.testForm.unisip_gsmet.checked=false
+ document.testForm.unisip_gsmeo.checked=false
+
+ FancyForm.update(document.testForm.sip_gsmrz1.getParent())
+ FancyForm.update(document.testForm.sip_gsmrz2.getParent())
+ FancyForm.update(document.testForm.sip_gsmrz3.getParent())
+
+ FancyForm.update(document.testForm.sip_landln.getParent())
+ FancyForm.update(document.testForm.sip_sipuniv.getParent())
+
+ FancyForm.update(document.testForm.gsmrz1_sip.getParent())
+ FancyForm.update(document.testForm.gsmrz2_sip.getParent())
+ FancyForm.update(document.testForm.gsmrz3_sip.getParent())
+
+ FancyForm.update(document.testForm.gsmrz1_gsmrz2.getParent())
+ FancyForm.update(document.testForm.gsmrz1_gsmrz3.getParent())
+ FancyForm.update(document.testForm.gsmrz2_gsmrz3.getParent())
+
+ FancyForm.update(document.testForm.landline_sip.getParent())
+ FancyForm.update(document.testForm.landline_gsmrz1.getParent())
+ FancyForm.update(document.testForm.landline_gsmrz2.getParent())
+ FancyForm.update(document.testForm.landline_gsmrz3.getParent())
+ FancyForm.update(document.testForm.gsmrz1_gsmee.getParent())
+ FancyForm.update(document.testForm.gsmrz1_gsmev.getParent())
+ FancyForm.update(document.testForm.gsmrz1_gsmet.getParent())
+ FancyForm.update(document.testForm.gsmrz1_gsmeo.getParent())
+ FancyForm.update(document.testForm.gsmrz2_gsmee.getParent())
+ FancyForm.update(document.testForm.gsmrz2_gsmev.getParent())
+ FancyForm.update(document.testForm.gsmrz2_gsmet.getParent())
+ FancyForm.update(document.testForm.gsmrz2_gsmeo.getParent())
+ FancyForm.update(document.testForm.gsmrz3_gsmee.getParent())
+ FancyForm.update(document.testForm.gsmrz3_gsmev.getParent())
+ FancyForm.update(document.testForm.gsmrz3_gsmet.getParent())
+ FancyForm.update(document.testForm.gsmrz3_gsmeo.getParent())
+ FancyForm.update(document.testForm.unisip_gsmee.getParent())
+ FancyForm.update(document.testForm.unisip_gsmev.getParent())
+ FancyForm.update(document.testForm.unisip_gsmet.getParent())
+ FancyForm.update(document.testForm.unisip_gsmeo.getParent())
+
+ //add here what the simple test should do!
+}
+
+function fullTest()
+{
+ document.testForm.sip_gsmrz1.checked=true
+ document.testForm.sip_gsmrz2.checked=true
+ document.testForm.sip_gsmrz3.checked=true
+
+ document.testForm.sip_landln.checked=true
+ document.testForm.sip_sipuniv.checked=true
+
+ document.testForm.gsmrz1_gsmrz2.checked=true
+ document.testForm.gsmrz1_gsmrz3.checked=true
+ document.testForm.gsmrz2_gsmrz3.checked=true
+
+ document.testForm.gsmrz1_sip.checked=true
+ document.testForm.gsmrz2_sip.checked=true
+ document.testForm.gsmrz3_sip.checked=true
+
+ document.testForm.landline_sip.checked=true
+
+ document.testForm.landline_gsmrz1.checked=true
+ document.testForm.landline_gsmrz2.checked=true
+ document.testForm.landline_gsmrz3.checked=true
+
+ document.testForm.gsmrz1_gsmee.checked=true
+ document.testForm.gsmrz1_gsmev.checked=true
+ document.testForm.gsmrz1_gsmet.checked=true
+ document.testForm.gsmrz1_gsmeo.checked=true
+
+ document.testForm.gsmrz2_gsmee.checked=true
+ document.testForm.gsmrz2_gsmev.checked=true
+ document.testForm.gsmrz2_gsmet.checked=true
+ document.testForm.gsmrz2_gsmeo.checked=true
+
+ document.testForm.gsmrz3_gsmee.checked=true
+ document.testForm.gsmrz3_gsmev.checked=true
+ document.testForm.gsmrz3_gsmet.checked=true
+ document.testForm.gsmrz3_gsmeo.checked=true
+
+ document.testForm.unisip_gsmee.checked=true
+ document.testForm.unisip_gsmev.checked=true
+ document.testForm.unisip_gsmet.checked=true
+ document.testForm.unisip_gsmeo.checked=true
+
+ FancyForm.update(document.testForm.sip_gsmrz1.getParent())
+ FancyForm.update(document.testForm.sip_gsmrz2.getParent())
+ FancyForm.update(document.testForm.sip_gsmrz3.getParent())
+
+ FancyForm.update(document.testForm.sip_landln.getParent())
+ FancyForm.update(document.testForm.sip_sipuniv.getParent())
+
+ FancyForm.update(document.testForm.gsmrz1_sip.getParent())
+ FancyForm.update(document.testForm.gsmrz2_sip.getParent())
+ FancyForm.update(document.testForm.gsmrz3_sip.getParent())
+
+ FancyForm.update(document.testForm.gsmrz1_gsmrz2.getParent())
+ FancyForm.update(document.testForm.gsmrz1_gsmrz3.getParent())
+ FancyForm.update(document.testForm.gsmrz2_gsmrz3.getParent())
+
+ FancyForm.update(document.testForm.landline_sip.getParent())
+ FancyForm.update(document.testForm.landline_gsmrz1.getParent())
+ FancyForm.update(document.testForm.landline_gsmrz2.getParent())
+ FancyForm.update(document.testForm.landline_gsmrz3.getParent())
+ FancyForm.update(document.testForm.gsmrz1_gsmee.getParent())
+ FancyForm.update(document.testForm.gsmrz1_gsmev.getParent())
+ FancyForm.update(document.testForm.gsmrz1_gsmet.getParent())
+ FancyForm.update(document.testForm.gsmrz1_gsmeo.getParent())
+ FancyForm.update(document.testForm.gsmrz2_gsmee.getParent())
+ FancyForm.update(document.testForm.gsmrz2_gsmev.getParent())
+ FancyForm.update(document.testForm.gsmrz2_gsmet.getParent())
+ FancyForm.update(document.testForm.gsmrz2_gsmeo.getParent())
+ FancyForm.update(document.testForm.gsmrz3_gsmee.getParent())
+ FancyForm.update(document.testForm.gsmrz3_gsmev.getParent())
+ FancyForm.update(document.testForm.gsmrz3_gsmet.getParent())
+ FancyForm.update(document.testForm.gsmrz3_gsmeo.getParent())
+ FancyForm.update(document.testForm.unisip_gsmee.getParent())
+ FancyForm.update(document.testForm.unisip_gsmev.getParent())
+ FancyForm.update(document.testForm.unisip_gsmet.getParent())
+ FancyForm.update(document.testForm.unisip_gsmeo.getParent())
+
+}
+
+function smartTest()
+{
+ document.testForm.sip_gsmrz1.checked=false
+ document.testForm.sip_gsmrz2.checked=false
+ document.testForm.sip_gsmrz3.checked=false
+
+ document.testForm.sip_landln.checked=false
+ document.testForm.sip_sipuniv.checked=false
+
+ document.testForm.gsmrz1_gsmrz2.checked=false
+ document.testForm.gsmrz1_gsmrz3.checked=false
+ document.testForm.gsmrz2_gsmrz3.checked=false
+
+ document.testForm.gsmrz1_sip.checked=false
+ document.testForm.gsmrz2_sip.checked=false
+ document.testForm.gsmrz3_sip.checked=false
+
+ document.testForm.landline_sip.checked=false
+
+ document.testForm.landline_gsmrz1.checked=false
+ document.testForm.landline_gsmrz2.checked=false
+ document.testForm.landline_gsmrz3.checked=false
+
+ document.testForm.gsmrz1_gsmee.checked=false
+ document.testForm.gsmrz1_gsmev.checked=false
+ document.testForm.gsmrz1_gsmet.checked=false
+ document.testForm.gsmrz1_gsmeo.checked=false
+
+ document.testForm.gsmrz2_gsmee.checked=false
+ document.testForm.gsmrz2_gsmev.checked=false
+ document.testForm.gsmrz2_gsmet.checked=false
+ document.testForm.gsmrz2_gsmeo.checked=false
+
+ document.testForm.gsmrz3_gsmee.checked=false
+ document.testForm.gsmrz3_gsmev.checked=false
+ document.testForm.gsmrz3_gsmet.checked=false
+ document.testForm.gsmrz3_gsmeo.checked=false
+
+
+ document.testForm.unisip_gsmee.checked=false
+ document.testForm.unisip_gsmev.checked=false
+ document.testForm.unisip_gsmet.checked=false
+ document.testForm.unisip_gsmeo.checked=false
+
+ FancyForm.update(document.testForm.sip_gsmrz1.getParent())
+ FancyForm.update(document.testForm.sip_gsmrz2.getParent())
+ FancyForm.update(document.testForm.sip_gsmrz3.getParent())
+
+ FancyForm.update(document.testForm.sip_landln.getParent())
+ FancyForm.update(document.testForm.sip_sipuniv.getParent())
+
+ FancyForm.update(document.testForm.gsmrz1_sip.getParent())
+ FancyForm.update(document.testForm.gsmrz2_sip.getParent())
+ FancyForm.update(document.testForm.gsmrz3_sip.getParent())
+
+ FancyForm.update(document.testForm.gsmrz1_gsmrz2.getParent())
+ FancyForm.update(document.testForm.gsmrz1_gsmrz3.getParent())
+ FancyForm.update(document.testForm.gsmrz2_gsmrz3.getParent())
+
+ FancyForm.update(document.testForm.landline_sip.getParent())
+ FancyForm.update(document.testForm.landline_gsmrz1.getParent())
+ FancyForm.update(document.testForm.landline_gsmrz2.getParent())
+ FancyForm.update(document.testForm.landline_gsmrz3.getParent())
+ FancyForm.update(document.testForm.gsmrz1_gsmee.getParent())
+ FancyForm.update(document.testForm.gsmrz1_gsmev.getParent())
+ FancyForm.update(document.testForm.gsmrz1_gsmet.getParent())
+ FancyForm.update(document.testForm.gsmrz1_gsmeo.getParent())
+ FancyForm.update(document.testForm.gsmrz2_gsmee.getParent())
+ FancyForm.update(document.testForm.gsmrz2_gsmev.getParent())
+ FancyForm.update(document.testForm.gsmrz2_gsmet.getParent())
+ FancyForm.update(document.testForm.gsmrz2_gsmeo.getParent())
+ FancyForm.update(document.testForm.gsmrz3_gsmee.getParent())
+ FancyForm.update(document.testForm.gsmrz3_gsmev.getParent())
+ FancyForm.update(document.testForm.gsmrz3_gsmet.getParent())
+ FancyForm.update(document.testForm.gsmrz3_gsmeo.getParent())
+ FancyForm.update(document.testForm.unisip_gsmee.getParent())
+ FancyForm.update(document.testForm.unisip_gsmev.getParent())
+ FancyForm.update(document.testForm.unisip_gsmet.getParent())
+ FancyForm.update(document.testForm.unisip_gsmeo.getParent())
+
+ //add here what the smart test should do
+}
+
+function deselectAll()
+{
+ document.testForm.sip_gsmrz1.checked=false
+ document.testForm.sip_gsmrz2.checked=false
+ document.testForm.sip_gsmrz3.checked=false
+
+ document.testForm.sip_landln.checked=false
+ document.testForm.sip_sipuniv.checked=false
+
+ document.testForm.gsmrz1_gsmrz2.checked=false
+ document.testForm.gsmrz1_gsmrz3.checked=false
+ document.testForm.gsmrz2_gsmrz3.checked=false
+
+ document.testForm.gsmrz1_sip.checked=false
+ document.testForm.gsmrz2_sip.checked=false
+ document.testForm.gsmrz3_sip.checked=false
+
+ document.testForm.landline_sip.checked=false
+
+ document.testForm.landline_gsmrz1.checked=false
+ document.testForm.landline_gsmrz2.checked=false
+ document.testForm.landline_gsmrz3.checked=false
+
+ document.testForm.gsmrz1_gsmee.checked=false
+ document.testForm.gsmrz1_gsmev.checked=false
+ document.testForm.gsmrz1_gsmet.checked=false
+ document.testForm.gsmrz1_gsmeo.checked=false
+
+ document.testForm.gsmrz2_gsmee.checked=false
+ document.testForm.gsmrz2_gsmev.checked=false
+ document.testForm.gsmrz2_gsmet.checked=false
+ document.testForm.gsmrz2_gsmeo.checked=false
+
+ document.testForm.gsmrz3_gsmee.checked=false
+ document.testForm.gsmrz3_gsmev.checked=false
+ document.testForm.gsmrz3_gsmet.checked=false
+ document.testForm.gsmrz3_gsmeo.checked=false
+
+
+ document.testForm.unisip_gsmee.checked=false
+ document.testForm.unisip_gsmev.checked=false
+ document.testForm.unisip_gsmet.checked=false
+ document.testForm.unisip_gsmeo.checked=false
+
+ FancyForm.update(document.testForm.sip_gsmrz1.getParent())
+ FancyForm.update(document.testForm.sip_gsmrz2.getParent())
+ FancyForm.update(document.testForm.sip_gsmrz3.getParent())
+
+ FancyForm.update(document.testForm.sip_landln.getParent())
+ FancyForm.update(document.testForm.sip_sipuniv.getParent())
+
+ FancyForm.update(document.testForm.gsmrz1_sip.getParent())
+ FancyForm.update(document.testForm.gsmrz2_sip.getParent())
+ FancyForm.update(document.testForm.gsmrz3_sip.getParent())
+
+ FancyForm.update(document.testForm.gsmrz1_gsmrz2.getParent())
+ FancyForm.update(document.testForm.gsmrz1_gsmrz3.getParent())
+ FancyForm.update(document.testForm.gsmrz2_gsmrz3.getParent())
+
+ FancyForm.update(document.testForm.landline_sip.getParent())
+ FancyForm.update(document.testForm.landline_gsmrz1.getParent())
+ FancyForm.update(document.testForm.landline_gsmrz2.getParent())
+ FancyForm.update(document.testForm.landline_gsmrz3.getParent())
+ FancyForm.update(document.testForm.gsmrz1_gsmee.getParent())
+ FancyForm.update(document.testForm.gsmrz1_gsmev.getParent())
+ FancyForm.update(document.testForm.gsmrz1_gsmet.getParent())
+ FancyForm.update(document.testForm.gsmrz1_gsmeo.getParent())
+ FancyForm.update(document.testForm.gsmrz2_gsmee.getParent())
+ FancyForm.update(document.testForm.gsmrz2_gsmev.getParent())
+ FancyForm.update(document.testForm.gsmrz2_gsmet.getParent())
+ FancyForm.update(document.testForm.gsmrz2_gsmeo.getParent())
+ FancyForm.update(document.testForm.gsmrz3_gsmee.getParent())
+ FancyForm.update(document.testForm.gsmrz3_gsmev.getParent())
+ FancyForm.update(document.testForm.gsmrz3_gsmet.getParent())
+ FancyForm.update(document.testForm.gsmrz3_gsmeo.getParent())
+ FancyForm.update(document.testForm.unisip_gsmee.getParent())
+ FancyForm.update(document.testForm.unisip_gsmev.getParent())
+ FancyForm.update(document.testForm.unisip_gsmet.getParent())
+ FancyForm.update(document.testForm.unisip_gsmeo.getParent())
+
+}
+</script>
+</body>
+</html>
diff --git a/For Weekly Test/tricode/testCase.php b/For Weekly Test/tricode/testCase.php
new file mode 100644
index 0000000..c9e12ee
--- /dev/null
+++ b/For Weekly Test/tricode/testCase.php
@@ -0,0 +1,209 @@
+<?
+ //color definitions
+ $colorDunno = array("R"=>216,"G"=>166,"B"=>14,"BorderR"=>0,"BorderG"=>0,"BorderB"=>0);
+ $colorFail = array("R"=>255, "G"=>25, "B"=>25,"BorderR"=>0,"BorderG"=>0,"BorderB"=>0);
+ $colorWork = array("R"=>150,"G"=>215,"B"=>121,"BorderR"=>0,"BorderG"=>0,"BorderB"=>0);
+
+
+$GSMRZ1 = $_GET['RZ1'];
+$GSMRZ2 = $_GET['RZ2'];
+$GSMRZ3 = $_GET['RZ3'];
+
+$SIP = $_GET['S'];
+$UNISIP = $_GET['US'];
+$LANDLINE = $_GET['LL'];
+$LSFKS = $_GET['LS'];
+
+$GSMEE = $_GET['EE'];
+$GSMEV = $_GET['EV'];
+$GSMET = $_GET['ET'];
+$GSMEO = $_GET['EO'];
+
+
+$SIPP = $_GET['SP'];
+$LANDLINEP = $_GET['SGP'];
+$UNISIPP = $_GET['USP'];
+$NANOBTS1P = $_GET['NBP1'];
+$NANOBTS2P = $_GET['NBP2'];
+/*
+$GSMRZ1 = 0;
+$GSMRZ2 = -10;
+$GSMRZ3 = 10;
+
+$SIP = 4;
+$UNISIP = 0;
+$LANDLINE = 1;
+$LSFKS = 1;
+
+$GSMEE = 10;
+$GSMEV = 10;
+$GSMET = -10;
+$GSMEO = 10;
+*/
+$GSMEXTCOL = 'icons/box_dunno.png';
+$GSMINTCOL = "icons/server_dunno.png";
+$LSFKSCOL = "icons/server_dunno.png";
+
+$SIPCOL = 'icons/sip_dunno';
+$UNISIPCOL = 'icons/uni-network_dunno.png';
+$LANDLINECOL = 'icons/telephone_dunno.png';
+
+$BTS1COL = $colorDunno;
+$BTS2COL = $colorDunno;
+$BTS3COL = $colorDunno;
+
+$GSMEECOL = 'icons/blackberry_dunno.png';
+$GSMEVCOL = 'icons/blackberry_dunno.png';
+$GSMETCOL = 'icons/blackberry_dunno.png';
+$GSMEOCOL = 'icons/blackberry_dunno.png';
+
+
+$BTS1PING = array("R"=>255,"G"=>0,"B"=>0); //put here the color :)
+$BTS1PING["Ticks"]=2;
+$BTS1PING["Weight"]=0;
+
+$BTS2PING = array("R"=>255,"G"=>0,"B"=>0);
+$BTS2PING["Ticks"]=2;
+$BTS2PING["Weight"]=0;
+
+$BTS3PING = array("R"=>255,"G"=>0,"B"=>0);
+$BTS3PING["Ticks"]=2;
+$BTS3PING["Weight"]=0;
+
+if ($GSMRZ1 > 0 || $GSMRZ2 > 0 || $GSMRZ3 > 0)
+{
+ $GSMINT = 1;
+ $GSMINTCOL = 'icons/server_work.png';
+}
+elseif($GSMRZ1 < 0 || $GSMRZ2 < 0 || $GSMRZ3 < 0)
+{
+ $GSMINT = -1;
+ $GSMINTCOL = 'icons/server_fail.png';
+}
+
+if($LANDLINE>0)
+{
+ $LANDLINECOL = 'icons/telephone_work.png';
+}
+elseif($LANDLINE<0)
+{
+ $LANDLINECOL = 'icons/telephone_fail.png';
+}
+
+if($SIP > 0 && $GSMINT > 0)
+{
+ $LSFKS = 1;
+}
+
+if($LSFKS>0)
+{
+ $LSFKSCOL = 'icons/server_work.png';
+}
+elseif($LSFKS<0)
+{
+ $LSFKSCOL = 'icons/server_fail.png';
+}
+
+if($SIP>0)
+{
+ $SIPCOL = 'icons/sip_work.png';
+}
+elseif($SIP<0)
+{
+ $SIPCOL = 'icons/sip_fail.png';
+}
+
+if($UNISIP > 0)
+{
+ $UNISIPCOL = 'icons/uni-network_work.png';
+}
+elseif($UNISIP < 0)
+{
+ $UNISIPCOL = 'icons/uni-network_fail.png';
+}
+
+if($GSMEE > 0 || $GSMEV > 0 || $GSMET > 0 || $GSMEO > 0)
+{
+ $GSMEXTCOL = 'icons/box_work.png';
+}
+elseif($GSMEE < 0 || $GSMEV < 0 || $GSMET < 0 || $GSMEO < 0)
+{
+ $GSMEXTCOL = 'icons/box_fail.png';
+}
+
+if($GSMRZ1 > 0)
+{
+ $BTS1COL = $colorWork;
+}
+elseif($GSMRZ1 < 0)
+{
+ $BTS1COL = $colorFail;
+}
+
+if($GSMRZ2 > 0)
+{
+ $BTS2COL = $colorWork;
+}
+elseif($GSMRZ2 < 0)
+{
+ $BTS2COL = $colorFail;
+}
+
+if($GSMRZ3 > 0)
+{
+ $BTS3COL = $colorWork;
+}
+elseif($GSMRZ3 < 0)
+{
+ $BTS3COL = $colorFail;
+}
+
+if($GSMEE > 0)
+{
+ $GSMEECOL = 'icons/blackberry_work.png';
+}
+elseif($GSMEE < 0)
+{
+ $GSMEECOL = 'icons/blackberry_fail.png';
+}
+
+if($GSMEV > 0)
+{
+ $GSMEVCOL = 'icons/blackberry_work.png';
+}
+elseif($GSMEV < 0)
+{
+ $GSMEVCOL = 'icons/blackberry_fail.png';
+}
+
+if($GSMET > 0)
+{
+ $GSMETCOL = 'icons/blackberry_work.png';
+}
+elseif($GSMET < 0)
+{
+ $GSMETCOL = 'icons/blackberry_fail.png';
+}
+
+if($GSMEO > 0)
+{
+ $GSMEOCOL = 'icons/blackberry_work.png';
+}
+elseif($GSMEO < 0)
+{
+ $GSMEOCOL = 'icons/blackberry_fail.png';
+}
+
+
+
+//NETWORK OPERABILITY
+$GSMINTPercent = rand(1,100);
+$GSMEXTPercent = rand(1,100);
+$SIPPercent = rand(1,100);
+$UNISIPPercent = rand(1,100);
+$LANDLINEPercent = rand(1,100);
+
+//print_r($GSMINTCOL);
+// add here to set the color for each node after the test ;)
+// setNode(0,$SIPCOL) or something as that :)
+?>
diff --git a/For Weekly Test/tricode/testingfile.py b/For Weekly Test/tricode/testingfile.py
new file mode 100644
index 0000000..f7f3f05
--- /dev/null
+++ b/For Weekly Test/tricode/testingfile.py
@@ -0,0 +1,49 @@
+
+nanoBts = list()
+lists = [['sip', 'GSMExt.o2',200],['sip', 'GSMExt.Tm',200],['sip', 'GSMExt.Eplus',486],['sip', 'GSMExt.Voda',200],['GSMExt.o2','sip',200],['GSMExt.Voda','sip',200],['GSMExt.Eplus','sip',486],['GSMExt.Tm','sip',486]]
+def test():
+ for x in lists:
+ call=x[0]
+ dest=x[1]
+ result=x[2]
+ #print x
+ if call[0:5]=='GSMEx': # looking for calling from GSMexternal
+ found = False
+ if len(nanoBts) == 0:
+ nanoBts.append([call, result])
+ found = False
+ else:
+ delete = False
+ for y in nanoBts: #find the existing result for GSM external in the list
+ name = y[0]
+ if name == call:
+ if int(y[1]) == 486:
+ delete = True
+ nanoBts.remove(y)
+ else:
+ found = True
+
+ if found != True:
+ nanoBts.append([call, result])
+ if dest[0:5]=='GSMEx': # looking for destination call to GSMexternal
+ found = False
+ if len(nanoBts) == 0:
+ nanoBts.append([dest,result])
+ found = False
+ else:
+ delete = False
+ for y in nanoBts:
+ name = y[0]
+ if name == dest:
+ if int(y[1]) == 486:
+ delete = True
+ item = y
+ nanoBts.remove(y)
+ else:
+ found = True
+ if found != True:
+ nanoBts.append([dest,result])
+ #print nanoBts
+
+test()
+print nanoBts
diff --git a/For Weekly Test/tricode/trueTableClass.py b/For Weekly Test/tricode/trueTableClass.py
new file mode 100755
index 0000000..36ddef6
--- /dev/null
+++ b/For Weekly Test/tricode/trueTableClass.py
@@ -0,0 +1,164 @@
+import DbClass
+
+class trueTable:
+ def __init__(self, resultsList):
+
+ self.resultsList = resultsList
+ self.outGoingRZ = False
+ self.asteriskServer = None
+ self.incomingRZ = None
+ self.openBSC = None
+ self.nanoBTS = None
+
+ def initDB(self):
+ # function for connect to database
+ self.db = DbClass.DBMySQLConnection('root', 'randompasswordSQL', 'localhost', 'gsmselftesting')
+ self.db.connectDB()
+ self.dbStatus = self.db.connectDB()
+
+ def lookingBTSname(self, btsname):
+ if len(self.nanoBts) == 0:
+ self.nanoBts.append([btsName,True])
+ found = True
+ else:
+ found = False
+ for y in self.nanoBts: #find the existing nanoBts result
+ name = y[0]
+ if name == btsName:
+ if y[1] == False:
+ self.nanoBts.remove(btsName)
+ else:
+ found = True
+ return found
+
+ def initTrueTable(self):
+ global btsName
+ self.initDB()
+ deviceLists = self.db.deviceList() #fetch device list from database
+ externalRZList = list()
+
+ for devLists in deviceLists: #define category of the external devices
+ device = devLists[0]
+ if device[0:5] == 'GSMEx' or device == 'landline':
+ externalRZList.append(device) # fetch into the list
+ self.db.closeDBConn()
+ lists = self.resultsList
+ self.nanoBts = list()
+ gsmResultList = list()
+
+ i= 1
+ for w in lists:
+ call=w[0]
+ dest=w[1]
+
+
+ if call[0:5]=='GSMRZ':
+ if i <= int(call[5:]):
+ i = int(call[5:])
+ if dest[0:5]=='GSMRZ':
+
+ if i <= int(dest[5:]):
+ i = int(dest[5:])
+ i = i+1
+
+ for x in lists: # to find nanoBts, asterik server and open BSC status regarding result test for GSM RZ
+ call=x[0]
+ dest=x[1]
+ result=x[2]
+ stop = False
+ j=1
+
+ if call[0:5]=='GSMRZ' or dest[0:5]=='GSMRZ':
+ while stop != True:
+ if j != i:
+ key = 'GSMRZ'+str(j)
+ if key == call or key == dest:
+
+ btsName = 'nanoBts '+str(j)
+ if result == '200':
+ btsName = 'nanoBts '+str(j)
+ self.asteriskServer = True #set status of asterik server as working
+ if self.lookingBTSname(btsName) != True:
+ #if doesnt found the nanoBts, add the result to the list, otherwise just ignoring
+ self.nanoBts.append([btsName,True])
+
+ if key == call:#
+ for z in externalRZList:# find the result for outgoing call from GSM RZ to external RZ network
+ if dest == z:
+ self.outGoingRZ = True #set status as working for outgoing RZ
+ if key == dest:
+ for z in externalRZList:
+ if call == z:
+ self.incomingRZ = True # find the result for imcoming call to GSM RZ from external RZ network
+ elif result == '486':
+ found = False
+ if key == call:# and dest == 'landline':
+ for z in externalRZList:
+ if dest == z and self.outGoingRZ != True:
+ self.outGoingRZ = False
+ if key == dest:# and call == 'landline':
+ for z in externalRZList:
+ if call == z and self.incomingRZ != True:
+ self.incomingRZ = False
+ if self.nanoBts == '':
+ self.nanoBts.append([btsName,False])
+ for y in self.nanoBts: #find the existing nanoBts result
+ name = y[0]
+ if name == btsName and y[1] != True:
+ found = True
+ if found != True:
+ self.nanoBts.append([btsName,False])
+
+
+ if result == '998' and key == dest: # find how to solve this!!!
+
+ if self.lookingBTSname(key) != True:
+ self.nanoBts.append([key,result])
+
+ if result == '999' and key == call: # find how to solve this!!!
+
+ if self.lookingBTSname(key) != True:
+ self.nanoBts.append([key,result])
+
+
+ j = j+1
+ elif j == i:
+ stop = True
+
+ if call[0:5]=='GSMEx': # looking for calling from GSMexternal
+ found = False
+ if len(self.nanoBts) == 0:
+ self.nanoBts.append([call,result])
+ found = False
+ else:
+ for y in self.nanoBts: #find the existing result for GSM external in the list
+ name = y[0]
+ if name == call:
+ if int(y[1]) == 486 or int(y[1]) == 999 or int(y[1]) == 998:
+ self.nanoBts.remove(y)
+ else:
+ found = True
+ if found != True:
+ self.nanoBts.append([call,result])
+
+ if dest[0:5]=='GSMEx': # looking for destination call to GSMexternal
+ found = False
+ if len(self.nanoBts) == 0:
+ self.nanoBts.append([dest,result])
+ found = False
+ else:
+
+ for y in self.nanoBts:
+ name = y[0]
+ if name == dest:
+ if int(y[1]) == 486 or int(y[1]) == 999 or int(y[1]) == 998:
+ self.nanoBts.remove(y)
+ else:
+ found = True
+ if found != True:
+ self.nanoBts.append([dest,result])
+ for device in externalRZList:
+ if device == dest and int(result[1]) == 200:
+ self.outGoingRZ = True
+
+
diff --git a/For Weekly Test/tricode/trueTableClass.pyc b/For Weekly Test/tricode/trueTableClass.pyc
new file mode 100644
index 0000000..f3e333b
--- /dev/null
+++ b/For Weekly Test/tricode/trueTableClass.pyc
Binary files differ
diff --git a/For Weekly Test/tricode/usbDetectClass.py b/For Weekly Test/tricode/usbDetectClass.py
new file mode 100755
index 0000000..74744a5
--- /dev/null
+++ b/For Weekly Test/tricode/usbDetectClass.py
@@ -0,0 +1,93 @@
+from serial import * #serial port library
+import sys
+from time import sleep
+import DbClass
+
+
+class serialPort:
+
+ def __init__(self, portAddress):
+ self.portAddress = portAddress
+ self.portExist = 0
+ self.IMEI = None
+ self.number = None
+ #self.updateStatus = None
+
+ def initDB(self):
+ self.db = DbClass.DBMySQLConnection('root', 'randompasswordSQL', 'localhost', 'gsmselftesting')
+ self.db.connectDB()
+ self.dbStatus = self.db.connectDB()
+
+ def initUpdate(self, deviceName, newPortName, newNumber):
+ self.initDB()
+
+ if self.dbStatus != 0:
+ self.db.updateGSMDevice(deviceName, newPortName, newNumber)
+ else:
+ print 'No connection to database'
+
+ def portInit(self):
+ self.portExist = 0
+ try:
+ self.ser = Serial(
+ port='/dev/'+self.portAddress,
+ baudrate=19200,
+ bytesize=EIGHTBITS,
+ parity=PARITY_NONE,
+ stopbits=STOPBITS_ONE)
+ self.ser.open()
+ self.ser.isOpen()
+ self.portExist = 1
+
+ except Exception, e:
+ print 'error'
+ return 0
+
+ def isInteger(self, x):
+ try:
+ int(x)
+ return True
+ except:
+ return False
+
+ def findIMEI(self):
+ self.portInit()
+ if self.portExist == 1:
+ self.ser.flushInput() #clean the input buffer for serial port
+ self.ser.write('AT+GSN\r')
+ sleep(0.5)
+ result = self.ser.read(25)
+ if result != '':
+ self.IMEI = result[result.find('3'):15+result.find('3')]
+ else:
+ self.IMEI = 'IMEI not found'
+ return self.IMEI
+
+ else:
+ self.IMEI = 'port not found'
+ return 0
+
+ def findNumber(self):
+ self.portInit()
+
+ if self.portExist == 1:
+ self.ser.flushInput() #clean the input buffer for serial port
+ self.ser.write('AT+CNUM\r')
+ sleep(0.5)
+ readNum = self.ser.read(35)
+ self.ser.close()
+ firstQuote = readNum.find('"')
+ cutString = readNum [firstQuote:]
+ secondQuote = cutString.find(',')
+ number = cutString[1:secondQuote-1]
+
+ if number != '':
+ self.number = number
+ else:
+ self.number = 'number not found'
+
+ return self.number
+
+ else:
+ self.number = 'port not found'
+ return 0
diff --git a/For Weekly Test/tricode/usbDetectClass.pyc b/For Weekly Test/tricode/usbDetectClass.pyc
new file mode 100644
index 0000000..1300d23
--- /dev/null
+++ b/For Weekly Test/tricode/usbDetectClass.pyc
Binary files differ
diff --git a/For Weekly Test/tricode/wait.gif b/For Weekly Test/tricode/wait.gif
new file mode 100644
index 0000000..1c72ebb
--- /dev/null
+++ b/For Weekly Test/tricode/wait.gif
Binary files differ