# SIPOHTTPS proxy [ToC] > Huom! Sipserverien asetuksiin pitää lisätä määritys client_timeout="0" /koha/koha-dev/etc/SIPconfig/SIPconfig.xml-tiedostossa, jotta sipserveri, jonka kanssa proxyserveri juttelee, ei aikakatkaise yhteyttä proxyserveriin. ### Viestintä Tcpserver.pl -proxyskripti ja REST-rajapinnan kutsuma SipOHttp.pm -moduli keskustelevat Socketeilla, joiden välinen yhteys luodaan SipOHttp.pm-modulissa aina uuden viestin saapuessa endpointiin (käynnistää SipOHttp.pm-modulin process-metodin). Kun viesti on käsitelty, socket-yhteys katkeaa. Itse sip-palvelimen kanssa socket-yhteyttä pidetään aina auki (client_timeout="0"), ellei sip-palvelin katkaise yhteyttä (Virheellinen lainausautomaatin/laitteen kirjautumisyritys tai sip-palvelimesta riippumaton ongelma). Sipserveriin muodostetaan socket-yhteys, kun proxyskripti käynnistetään. Jos sipserveriin ei saada yhteyttä skriptin käynnistyessä tai viestejä käsiteltäessä, proxyskriptin suoritus katkeaa. (Kehitettävää: Mahdollista tarkkailla auki olevaa yhteyttä ulkoisen skriptin avulla? Tarkkailee, onko proxyskriptin prosessi käynnissä? Jos ei ole, sip-palvelin katkaissut yhteyden. Sipserverin on oltava käynnissä ennen kuin sen proxyserveri käynnistetään.) ```sequence sipmessages endpoint->SipOHttp.pm: request_xml Note right of SipOHttp.pm:Purettu sip-viesti SipOHttp.pm->tcpserver.pl: tcpserver.pl->SipServer.pm: Note right of SipServer.pm: SIP-käsittely SipServer.pm->tcpserver.pl: Note left of SipServer.pm: SIP vastaus tcpserver.pl->SipOHttp.pm: Note left of SipOHttp.pm: SIP vastaus xml:ksi SipOHttp.pm->sipmessages endpoint: ``` ### tcpserver.pl Jokaista HTTPS:ää käyttävää lainausautomaattia varten käynnistetään oma instanssinsa proxyserveri tcpserver.pl:stä. Sip-palvelimen on oltava käynnissä ennen kuin sen proxyserveri käynnistetään. Kun skripti käynnistetään, se ottaa vastaan parametrina lainausautomaatin nimen, minkä avulla skripti hakee asetustiedostosta koha/Koha/koha-tmpl/sipdevices.xml socketien tarvitsemat osoitteet ja porttimääritykset käynnistettävälle proxyserveri-instanssille ja sipserverille, minkä kanssa proxyserveri tulee keskustelemaan. Näitä tietoja siis käytetään uusien socketien luontiin tiedonsiirtoa varten. Jos proxypalvelin käynnistettäisiin systemd:n init-skriptin avulla, esimerkki voisi olla tämän näköinen: sipdevice1.service [Unit] Description=systemd service file for the proxy server of sipdevice1 [Service] ExecStart="/home/koha/Koha/C4/SIP/tcpserver.pl" sipdevice1 User=koha Group=koha Esimerkki määritystiedostosta: sipdevices.xml: <?xml version='1.0' encoding='UTF-8' standalone="yes" ?> <sipdevices> <sipdevice1> <host>10.0.3.217</host> <port>6009</port> <proxyhost>0.0.0.0</proxyhost> <proxyport>2899</proxyport> </sipdevice1> <sipdevice2> <host>10.0.3.217</host> <port>6010</port> <proxyhost>0.0.0.0</proxyhost> <proxyport>3899</proxyport> </sipdevice2> </sipdevices> ### SipOHttp.pm Kun REST endpoint sipmessages vastaanottaa POST-viestin, Swagger API tarkistaa, että pyynnön bodyssa kulkee json-muotoinen parametri "request_xml" jonka arvona on viesti. Tämä viesti sisältää SIP-viestin XML:ään käärittynä. Viestiä ei validoida vielä tässä vaiheessa. Swagger Api tarkistaa vain, että parametri "request_xml" löytyy. Jos endpointin validointi onnistuu, käynnistyy SipOHttp.pm -modulin process-funktio. Funktio validoi xml-sisällön viestissä. Request_xml:n arvon on oltava XML-muotoinen viesti joka noutattaa seuraavaa xml-skeemaa: /koha/Koha/koha-tmpl/sipschema.xsd <?xml version="1.0" encoding="UTF-8"?> <!-- sip.xsd $Revision: 1.7 $ sos@axiell.com --> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ns1="http://axiell.com/Schema/sip.xsd" targetNamespace="http://axiell.com/Schema/sip.xsd" elementFormDefault="unqualified" attributeFormDefault="unqualified"> <xs:element name="sip"> <xs:complexType> <xs:choice> <xs:element name="request" type="xs:string"/> <xs:element name="response" type="xs:string"/> <xs:element name="error" type="xs:string"/> </xs:choice> <xs:attribute name="login" type="xs:string"/> <xs:attribute name="password" type="xs:string"/> </xs:complexType> </xs:element> </xs:schema> XML-viestiä verrataan tähän skeematiedostoon, ja jos xml-rakenteessa on virheitä, skripti palauttaa endpointille virhekoodin. Jos viesti on kunnossa, siitä puretaan SIP-viesti. Laite, jolle viesti on tarkoitettu puretaan "login:" tiedosta XML:n sisällä. Sen jälkeen SIP-viesti lähetetään laitetta vastaavalle proxyserverille ja vastaanotetaan sen kautta palautuva viesti sip-palvelimelta. Palautuneesta SIP-viestistä muodostetaan xml-muotoinen paluuviesti, jonka pohja löytyy sijainnista: ...Koha/koha-tmpl/sipresp.tmpl SIP-viesti liitetään response-parametriin (<response>xxxxxxxx</response>). Viesti välitetään rajapintaan vastauksena POST-pyyntöön. ### Virhetilanteet ja loki SipOHttp-skripti palauttaa seuraavat virheilmoitukset POST-kyselyihin: - XML validointi epäonnistui skeematiedostoa vastaan: HTTP-virhe 400 viestillä "Validation failed. Invalid Request. " - Jos sip-serveriin tai proxyserveriin ei saada yhteyttä: HTTP 500 "Something went wrong, check the logs." - Jos XML-viestin "login:" parametria vastaavia proxy/sipserveriasetuksia ei löydy sipdevices.xml:stä tai ne ovat puutteelliset: HTTP 400 "No config found for login device." Virhetilanteista kirjautuu yksityiskohtaisempia tietoja rest.log -tiedostoon (home/koha/koha-dev/var/log/rest.log) esim. Viimeiseksi mainitun virhetilanteen kohdalla: [WARN] Missing proxy server config parameters for sipdevice6 in sipdevices.xml Voit määrittää tcpserver.pl:n informaatio- ja virheviestien näyttämisen DEBUG ympäristömuuttujalla.