Teilstring kopieren aus Ansistrings mit Zeilenumbrüchen

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Joh
Lazarusforum e. V.
Beiträge: 177
Registriert: Sa 26. Mai 2012, 17:31
OS, Lazarus, FPC: Win 10 (L 2.2.6 x64 FPC 3.2.2)
CPU-Target: 64Bit

Re: Teilstring kopieren aus Ansistrings mit Zeilenumbrüchen

Beitrag von Joh »

Nur zur Klärung:
ich bekomme den Ansistring via Synapse TUDPBlockSocket.RecvPacket zurück:

Code: Alles auswählen

const SIP_PORT = '5060';
      SIP_SOFTWARE = 'Johs Fritzbox-SIP-Test';      

var Sock: TUDPBlockSocket;
    buf: string;
 begin
  Sock:=TUDPBlockSocket.Create;
  try
    sock.Bind('0.0.0.0','0');
    sock.connect(FritzIP, SIP_PORT);
    if sock.LastError = 0 then
    begin
      buf := getSendString(csREGISTER, '');  // in getSendString wird der REGISTER-String erzeugt und hier gesendet
      sock.SendString(Buf);
      buf := sock.RecvPacket(1000);  // die Antwort der Fritzbox - Das Thema des Threads
    end;
end;

// eigentlich FormCreate...
  UserIP := '192.168.0.33';  // meine IP
  FritzIP := '192.168.0.1';  // Fritzbox IP
  // Diese Werte werden in der Fritzbox bei der Erstellung des SIP-Telefoniegerätes erstellt
  UserID := 'SIPbenutzer';
  Password := 'SIPpasswort';

hier der zugehörige gesendete Text (generiert in getSendString()):

Code: Alles auswählen

REGISTER sip:192.168.0.1 SIP/2.0
Via: SIP/2.0/UDP 192.168.0.1;rport;branch=z9hG4bK085E2D8F-2076-41DA-A7D5-0CFF2CB63252
From: 192.168.0.33 <sip:SIPbenutzer@192.168.0.1>;tag=193408453
To: 192.168.0.33 <sip:SIPbenutzer@192.168.0.1>
Call-ID: AC11741D-FBCF-408D-B3FB-14E4C74265DF@192.168.0.1
CSeq: 1 REGISTER
Max-Forwards: 5
Expires: 1800
Contact: 192.168.0.33 <sip:SIPbenutzer@192.168.0.1>
User-Agent: Johs Fritzbox-SIP-Test
Content-Length: 0
dann kommt die Antwort der Fritzbox (siehe Anfangspost):

Code: Alles auswählen

SIP/2.0 401 Unauthorized
Via: SIP/2.0/UDP 192.168.0.1;rport=57106;branch=z9hG4bK085E2D8F-2076-41DA-A7D5-0CFF2CB63252;received=192.168.0.33
From: 192.168.0.33 <sip:SIPbenutzer@192.168.0.1>;tag=193408453
To: 192.168.0.33 <sip:SIPbenutzer@192.168.0.1>;tag=2C67756FB8FD29DB
Call-ID: AC11741D-FBCF-408D-B3FB-14E4C74265DF@192.168.0.1
CSeq: 1 REGISTER
WWW-Authenticate: Digest realm="fritz.box", nonce="23D3919CC803E37F"
User-Agent: FRITZ!OS
Content-Length: 0
und dann muß ich ein weiteres REGISTER erzeugen und senden mit der Zeile:

Code: Alles auswählen

// realm und nonce aus der Fritzbox-Antwort, Responce enthält das User-Passwort als MD5-Hash
REGISTER...wie vor
Authorization: Digest username="SIPbenutzer",realm="fritz.box",nonce="23D3919CC803E37F",response="ca4bf04483ab4e37e5dcddaef9822894",uri="sip:SIPbenutzer",algorithm=MD5
just my two Beer

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Teilstring kopieren aus Ansistrings mit Zeilenumbrüchen

Beitrag von theo »

Und wo ist jetzt das Problem?
Wenn nach

Code: Alles auswählen

buf := sock.RecvPacket(1000);
buf den kompletten String enthält, kannst du ihn mit einer der oben genannten Methoden durchsuchen.
Wenn buf nicht den kompletten String enthält, dann hast du ein anderes Problem.

Antworten