ID:               49423
 Comment by:       david dot schueler at wapkamera dot de
 Reported By:      david dot schueler at wapkamera dot de
 Status:           Feedback
 Bug Type:         Streams related
 Operating System: Gentoo Linux
 PHP Version:      5.2.10
 New Comment:

Okay, here's a tcpdump output, which shows that the other REGISTER
strings are beeing sent:

km33 ~ # tcpdump -i lo -s0 -A port 5060
tcpdump: verbose output suppressed, use -v or -vv for full protocol
decode
listening on lo, link-type EN10MB (Ethernet), capture size 65535 bytes
18:42:22.598199 IP localhost.5050 > localhost.5060: SIP, length: 8
E..$|b...@.@..................#REGISTER
18:42:22.598231 IP localhost.5050 > localhost.5060: SIP, length: 9
E..%|c...@.@..................$ REGISTER
18:42:22.598242 IP localhost.5050 > localhost.5060: SIP, length: 9
E..%|d...@.@..................$REGISTER
^C
3 packets captured
6 packets received by filter
0 packets dropped by kernel

As you can see i'm sending from port 5050 to port 5060 (which is the
default SIP port). No other process is listening on port 5050. Only
asterisk is listening on port 5060, which i want to communicate with.

km33 ~ # netstat -anp | grep 5050
km33 ~ # netstat -anp | grep 5060
udp   0   0 0.0.0.0:5060   0.0.0.0:*   11132/asterisk

And i'm not blocking any ports on my system, because i'm not using any
firewall on my testsystem.


Previous Comments:
------------------------------------------------------------------------

[2009-08-31 16:26:58] david dot schueler at wapkamera dot de

Yes i wanted to send as line feed. But it doesn't matter because even
sending "REGISTER \r\n" nor "REGISTER abc" is working on 5.2.10.

I made a little script for showing what is happening:

<?php
echo phpversion()."\n";

$opts = array('socket' => array("bindto" => "0:5050"));
$context = stream_context_create($opts);
$socket = stream_socket_client("udp://127.0.0.1:5060", $errno, $error,
30, STREAM_CLIENT_CONNECT, $context);

$s[] = "REGISTER abc";
$s[] = "REGISTER";
$s[] = " REGISTER";
$s[] = "REGISTER ";

foreach ($s as $out) {
        echo "Outputting: \"".$out."\"\n";
        $bytes = fwrite($socket,$out);
        echo "Bytes written to socket: ".$bytes."\n";
}       
?> 

And the output is:

Kienzle ~ # php fwrite.php 
5.2.10-pl0-gentoo
Outputting: "REGISTER abc"
Bytes written to socket: 0
Outputting: "REGISTER"
Bytes written to socket: 8
Outputting: " REGISTER"
Bytes written to socket: 9
Outputting: "REGISTER "
Bytes written to socket: 9

Kienzle ~ # uname -a
Linux Kienzle 2.6.27-gentoo-r8 #7 SMP Wed Apr 29 18:42:19 CEST 2009
x86_64 AMD Athlon(tm) 64 X2 Dual Core Processor 6000+ AuthenticAMD
GNU/Linux

On another system, running the same version of php:
km33 ~ # php test.php 
5.2.10-pl0-gentoo
Outputting: "REGISTER abc"
Bytes written to socket: 0
Outputting: "REGISTER"
Bytes written to socket: 8
Outputting: " REGISTER"
Bytes written to socket: 9
Outputting: "REGISTER "
Bytes written to socket: 9
km33 ~ # uname -a
Linux km33902 2.6.30-gentoo-r4 #2 SMP Tue Aug 4 17:44:21 CEST 2009
x86_64 AMD Phenom(tm) 9950 Quad-Core Processor AuthenticAMD GNU/Linux

And for example on a Debian System:
ns20 ~ # php test.php
5.2.0-8+etch15
Outputting: "REGISTER abc"
Bytes written to socket: 12
Outputting: "REGISTER"
Bytes written to socket: 0
Outputting: " REGISTER"
Bytes written to socket: 9
Outputting: "REGISTER "
Bytes written to socket: 0
e...@ns2014921:~$ uname -a
Linux ns2014921.ovh.net 2.6.24.2-xxxx-std-ipv4-32 #4 SMP Wed Feb 13
16:50:04 CET 2008 i686 GNU/Linux

Look, the problem occures at "REGISTER".

I use "tcpdump -i lo -s0 -A port 5060" to look for the packet being
sent. And if fwrite() returns 0 then there arent any bytes on the
interface. So the output seems to be true.

------------------------------------------------------------------------

[2009-08-31 16:20:36] sjo...@php.net

Thank you for your report.

I could not reproduce your problem. You say it only fails to send
something if port 5060 is used. This leads me to think this issue is
specific to your computer. Maybe another program is running on port
5060, or a firewall has blocked this port. How do you determine whether
the packet is sent?

------------------------------------------------------------------------

[2009-08-31 15:50:41] j...@php.net

And I guess you wanted to send the \r\n as line feed/break instead of
literal \r\n ? If so, you should put double quotes around the text..

------------------------------------------------------------------------

[2009-08-31 15:46:53] j...@php.net

Please try using this snapshot:

  http://snaps.php.net/php5.2-latest.tar.gz
 
For Windows:

  http://windows.php.net/snapshots/

Works fine for me. fwrite() returns int(13). 

------------------------------------------------------------------------

[2009-08-31 13:22:55] david dot schueler at wapkamera dot de

Description:
------------
If i execute the script below, it will not send the text "REGISTER"
over UDP. If the text is prepended with any other character or sent to
another port it will be transmitted successful.

Reproduce code:
---------------
<?php
$opts = array('socket' => array("bindto" => "0:5050")); // set source
port = 5050
$context = stream_context_create($opts);
$socket = stream_socket_client("udp://127.0.0.1:5060", $errno, $error,
30, STREAM_CLIENT_CONNECT, $context);

fwrite($socket,'REGISTER \r\n');
?>

Expected result:
----------------
The text "REGISTER" followed by a line break to be send over UDP to the
given host and port.

Actual result:
--------------
Nothing happens. No packet gets generated, no error or warning is
thrown. fwrite() retuns 0.


------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=49423&edit=1

Reply via email to