====== std.net.sip ====== SIP (Session Initiation Protocol, RFC 3261) ist das Standardsignalisierungsprotokoll für VoIP-Telefonie und Multimedia-Sessions. SIP regelt Aufbau, Änderung und Abbau von Kommunikationssitzungen — die eigentliche Medienübertragung erfolgt separat via RTP. Die Unit implementiert REGISTER, OPTIONS, INVITE-Sequenzen sowie das vollständige Parsing und den Aufbau von SIP-Nachrichten mit allen Status-Codes (1xx Provisional, 2xx Success, 3xx Redirect, 4xx–6xx Error). Einsatzbereiche sind VoIP-Clients, Telefonanlagen-Integration (PBX), Softphones, SIP-Trunking-Monitoring und automatisierte Tests von SIP-Infrastruktur. ---- ===== Imports ===== * ''[[lyx_-_programmiersprache:units:net:socket|std.net.socket]]'' * ''[[lyx_-_programmiersprache:units:net:dns|std.net.dns]]'' * ''[[lyx_-_programmiersprache:units:net:types|std.net.types]]'' ---- ===== Konstanten ===== ^ Name ^ Typ ^ Wert ^ Sichtbarkeit ^ | ''SIP_PORT'' | ''int64'' | ''5060'' | pub | | ''SIPS_PORT'' | ''int64'' | ''5061'' | pub | | ''SIP_METHOD_REGISTER'' | ''int64'' | ''1'' | pub | | ''SIP_METHOD_INVITE'' | ''int64'' | ''2'' | pub | | ''SIP_METHOD_ACK'' | ''int64'' | ''3'' | pub | | ''SIP_METHOD_BYE'' | ''int64'' | ''4'' | pub | | ''SIP_METHOD_CANCEL'' | ''int64'' | ''5'' | pub | | ''SIP_METHOD_OPTIONS'' | ''int64'' | ''6'' | pub | | ''SIP_METHOD_MESSAGE'' | ''int64'' | ''7'' | pub | | ''SIP_METHOD_SUBSCRIBE'' | ''int64'' | ''8'' | pub | | ''SIP_METHOD_NOTIFY'' | ''int64'' | ''9'' | pub | | ''SIP_METHOD_PUBLISH'' | ''int64'' | ''10'' | pub | | ''SIP_METHOD_INFO'' | ''int64'' | ''11'' | pub | | ''SIP_METHOD_PRACK'' | ''int64'' | ''12'' | pub | | ''SIP_METHOD_UPDATE'' | ''int64'' | ''13'' | pub | | ''SIP_METHOD_REFER'' | ''int64'' | ''14'' | pub | | ''SIP_TRYING'' | ''int64'' | ''100'' | pub | | ''SIP_RINGING'' | ''int64'' | ''180'' | pub | | ''SIP_CALL_IS_BEING_FORWARDED'' | ''int64'' | ''181'' | pub | | ''SIP_QUEUED'' | ''int64'' | ''182'' | pub | | ''SIP_SESSION_PROGRESS'' | ''int64'' | ''183'' | pub | | ''SIP_OK'' | ''int64'' | ''200'' | pub | | ''SIP_ACCEPTED'' | ''int64'' | ''202'' | pub | | ''SIP_MULTIPLE_CHOICES'' | ''int64'' | ''300'' | pub | | ''SIP_MOVED_PERMANENTLY'' | ''int64'' | ''301'' | pub | | ''SIP_MOVED_TEMPORARILY'' | ''int64'' | ''302'' | pub | | ''SIP_USE_PROXY'' | ''int64'' | ''305'' | pub | | ''SIP_ALTERNATIVE_SERVICE'' | ''int64'' | ''380'' | pub | | ''SIP_BAD_REQUEST'' | ''int64'' | ''400'' | pub | | ''SIP_UNAUTHORIZED'' | ''int64'' | ''401'' | pub | | ''SIP_PAYMENT_REQUIRED'' | ''int64'' | ''402'' | pub | | ''SIP_FORBIDDEN'' | ''int64'' | ''403'' | pub | | ''SIP_NOT_FOUND'' | ''int64'' | ''404'' | pub | | ''SIP_METHOD_NOT_ALLOWED'' | ''int64'' | ''405'' | pub | | ''SIP_NOT_ACCEPTABLE'' | ''int64'' | ''406'' | pub | | ''SIP_PROXY_AUTHENTICATION_REQUIRED'' | ''int64'' | ''407'' | pub | | ''SIP_REQUEST_TIMEOUT'' | ''int64'' | ''408'' | pub | | ''SIP_GONE'' | ''int64'' | ''410'' | pub | | ''SIP_REQUEST_ENTITY_TOO_LARGE'' | ''int64'' | ''413'' | pub | | ''SIP_REQUEST_URI_TOO_LONG'' | ''int64'' | ''414'' | pub | | ''SIP_UNSUPPORTED_MEDIA_TYPE'' | ''int64'' | ''415'' | pub | | ''SIP_UNSUPPORTED_URI_SCHEME'' | ''int64'' | ''416'' | pub | | ''SIP_BAD_EXTENSION'' | ''int64'' | ''420'' | pub | | ''SIP_EXTENSION_REQUIRED'' | ''int64'' | ''421'' | pub | | ''SIP_INTERVAL_TOO_BRIEF'' | ''int64'' | ''423'' | pub | | ''SIP_TEMPORARILY_UNAVAILABLE'' | ''int64'' | ''480'' | pub | | ''SIP_CALL_TRANSACTION_DOES_NOT_EXIST'' | ''int64'' | ''481'' | pub | | ''SIP_LOOP_DETECTED'' | ''int64'' | ''482'' | pub | | ''SIP_TOO_MANY_HOPS'' | ''int64'' | ''483'' | pub | | ''SIP_ADDRESS_INCOMPLETE'' | ''int64'' | ''484'' | pub | | ''SIP_AMBIGUOUS'' | ''int64'' | ''485'' | pub | | ''SIP_BUSY_HERE'' | ''int64'' | ''486'' | pub | | ''SIP_REQUEST_TERMINATED'' | ''int64'' | ''487'' | pub | | ''SIP_NOT_ACCEPTABLE_HERE'' | ''int64'' | ''488'' | pub | | ''SIP_REQUEST_PENDING'' | ''int64'' | ''491'' | pub | | ''SIP_UNDECIPHERABLE'' | ''int64'' | ''493'' | pub | | ''SIP_INTERNAL_SERVER_ERROR'' | ''int64'' | ''500'' | pub | | ''SIP_NOT_IMPLEMENTED'' | ''int64'' | ''501'' | pub | | ''SIP_BAD_GATEWAY'' | ''int64'' | ''502'' | pub | | ''SIP_SERVICE_UNAVAILABLE'' | ''int64'' | ''503'' | pub | | ''SIP_SERVER_TIME_OUT'' | ''int64'' | ''504'' | pub | | ''SIP_VERSION_NOT_SUPPORTED'' | ''int64'' | ''505'' | pub | | ''SIP_MESSAGE_TOO_LARGE'' | ''int64'' | ''513'' | pub | | ''SIP_BUSY_EVERYWHERE'' | ''int64'' | ''600'' | pub | | ''SIP_DECLINE'' | ''int64'' | ''603'' | pub | | ''SIP_DOES_NOT_EXIST_ANYWHERE'' | ''int64'' | ''604'' | pub | | ''SIP_NOT_ACCEPTABLE_ANYWHERE'' | ''int64'' | ''606'' | pub | ---- ===== Typen ===== ==== SIPConn (struct) ==== ^ Feld ^ Typ ^ ==== SIPResponse (struct) ==== ^ Feld ^ Typ ^ ---- ===== Funktionen ===== ^ Signatur ^ Sichtbarkeit ^ Beschreibung ^ | ''SIPNextCseq(): int64'' | pub | Nächste CSeq-Sequenznummer erzeugen | | ''SIPGenerateRandom(len: int64): int64'' | pub | Zufälligen Call-ID-String erzeugen | | ''SIPStrLen(s: int64): int64'' | pub | Länge eines C-Strings berechnen | | ''SIPWriteStr(buf: int64, pos: int64, str: int64): int64'' | pub | Nullterminierten String in Puffer schreiben | | ''SIPWriteLit(buf: int64, pos: int64, str: int64, len: int64): int64'' | pub | String mit bekannter Länge schreiben | | ''SIPBuildRequestLine(buf: int64, pos: int64, method: int64, uri: int64): int64'' | pub | SIP-Anfrage-Startzeile aufbauen | | ''SIPBuildRegister(user: int64, domain: int64, contact: int64, callId: int64, cseq: int64): int64'' | pub | REGISTER-Nachricht aufbauen | | ''SIPBuildMessage(fromUser: int64, toUser: int64, toDomain: int64, body: int64, callId: int64, cseq: int64): int64'' | pub | MESSAGE-Anfrage aufbauen | | ''SIPBuildOptions(user: int64, domain: int64, callId: int64, cseq: int64): int64'' | pub | OPTIONS-Anfrage aufbauen | | ''SIPParseStatusCode(msg: int64): int64'' | pub | Statuscode aus SIP-Antwort extrahieren | | ''SIPParseHeader(msg: int64, header: int64, headerLen: int64): int64'' | pub | Bestimmten Header aus Nachricht parsen | | ''SIPConnect(host: int64, port: int64): SIPConn'' | pub | TCP-Verbindung zu SIP-Server aufbauen | | ''SIPSend(conn: SIPConn, msg: int64): int64'' | pub | SIP-Nachricht über Verbindung senden | | ''SIPReceive(conn: SIPConn): int64'' | pub | SIP-Antwort empfangen | | ''SIPRegister(conn: SIPConn, user: int64, pass: int64, domain: int64): int64'' | pub | Benutzer beim SIP-Registrar anmelden | | ''SIPSendMessage(conn: SIPConn, toUser: int64, toDomain: int64, body: int64): int64'' | pub | SIP-Textnachricht an Empfänger senden | | ''SIPOptions(conn: SIPConn, user: int64, domain: int64): int64'' | pub | Server-Fähigkeiten per OPTIONS abfragen | | ''SIPDisconnect(conn: SIPConn)'' | pub | SIP-Verbindung trennen |