Yealink Forums

Full Version: [RESOLVED] Server initiated pushXML to port 443
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Hi there!

I can successfully push xml to my yealink phones using port 80, but nothing happens when I try to sendit using port 443

I'm using a function much like this one taken from yealink's TextScreen.php, but changing port to 443 causes the phone to ignore it.

Code:
function push2phone($server,$phone,$data)
{
  $xml = "xml=".$data;
  $post = "POST / HTTP/1.1\r\n";
  $post .= "Host: $phone\r\n";
  $post .= "Referer: $server\r\n";
  $post .= "Connection: Keep-Alive\r\n";
  $post .= "Content-Type: text/xml\r\n";
  $post .= "Content-Length: ".strlen($xml)."\r\n\r\n";
  $fp = @fsockopen ( $phone, 80, $errno, $errstr, 5);
  if($fp)
  {
    fputs($fp, $post.$xml);
    flush();
    fclose($fp);
  }
}

Is is possible? Am I missing something?
hi

thanks for you information

for this issue, please check if the 443 port is occupied by other applications !

TKS & BR
Michael

Note : Our office will be closed from 4th, Feb. 2016 to 14th, Feb, 2016 due to CNY holidays.
Hi and thanks for your help.

Sorry I don't follow your question. I have nothing using port 443 (don't even have apache enabled) and I cannot occupy 443 port in the phone as far as I know. I am pushing the xml directly to the phone from the server command line using php like this:

[hostname ~]# php TextScreen80.php (testing port 80 works FINE)

[hostname ~]# php TextScreen443.php (testing port 443 FAILS)

It's a really simple hardcoded php from yealink and I'm only changing the ip adress from the server (10.0.0.1), telephone (10.0.0.2) and the port number.

Code:
<?php
#
function push2phone($server,$phone,$data)
{
  $xml = "xml=".$data;
  $post = "POST / HTTP/1.1\r\n";
  $post .= "Host: $phone\r\n";
  $post .= "Referer: $server\r\n";
  $post .= "Connection: Keep-Alive\r\n";
  $post .= "Content-Type: text/xml\r\n";
  $post .= "Content-Length: ".strlen($xml)."\r\n\r\n";
  $fp = @fsockopen ( $phone, 443, $errno, $errstr, 5);
  if($fp)
  {
    fputs($fp, $post.$xml);
    flush();
    fclose($fp);
  }
}
##############################
$xml = "<YealinkIPPhoneTextScreen Beep=\"yes\">\n";
$xml .= "<Title>Push test</Title>\n";
$xml .= "<Text>This is a test for pushing text to a phone.</Text>\n";
$xml .= "</YealinkIPPhoneTextScreen>\n";
push2phone("10.0.0.1","10.0.0.2",$xml);


I enabled loglevel 6 on the phone and I see the following lines when pushing to port 80 using php TextScreen80.php:

Code:
Jan 28 14:03:47 10.0.0.2 mini_httpd[634]: mini_httpd.c(1997):path:/,query:
Jan 28 14:03:47 10.0.0.2 mini_httpd[634]: Receive PushXml Server[10.0.0.1] Request!
Jan 28 14:03:47 10.0.0.2 mini_httpd[634]: Receive PushXml Server[10.0.0.1] Request!
Jan 28 14:03:47 10.0.0.2 syslog: Receive PushXml Server[10.0.0.1] Request!
Jan 28 14:03:47 10.0.0.2 mini_httpd[407]: mini_httpd.c(1510):child process 634 exit!
Jan 28 14:03:47 10.0.0.2 VPM_Msg[507]: The msg:VPM_MSG_OPEN_HANDFREE_MODE, WPARAM 1, LPARAM 0
Jan 28 14:03:47 10.0.0.2 VPM_Msg[507]: The msg:VPM_MSG_SET_VOLUNE, WPARAM 1, LPARAM 13
Jan 28 14:03:47 10.0.0.2 VPM_Msg[507]: The msg:VPM_MSG_SET_VOLUNE, WPARAM 1, LPARAM 13
Jan 28 14:03:48 10.0.0.2 VPM_Msg[507]: The msg:VPM_MSG_PLAY_TONE, WPARAM 82, LPARAM 1
Jan 28 14:03:48 10.0.0.2 VPM_Msg[507]: The msg:VPM_MSG_PLAY_TONE, WPARAM 0, LPARAM 0
Jan 28 14:03:48 10.0.0.2 VPM_Msg[507]: The msg:VPM_MSG_SET_VOLUNE, WPARAM 1, LPARAM 13
Jan 28 14:03:48 10.0.0.2 VPM_Msg[507]: The msg:VPM_MSG_OPEN_HANDSET_MODE, WPARAM 1, LPARAM 0
Jan 28 14:03:48 10.0.0.2 VPM_Msg[507]: The msg:VPM_MSG_SET_VOLUNE, WPARAM 1, LPARAM 18

While using php TextScreen443.php I see only this line and nothing happens on the LCD:
Code:
Jan 28 14:20:54 10.0.0.2 mini_httpds[436]: mini_httpd.c(1510):child process 552 exit!
.

The phone is getting 'something' as the log shows.

I found nothing on the documentation about pushxml port restriction. Any ideas?

Than you btw!
Hi again!

I figured out the problem. I forgot to prefix the hostname with 'ssl://' in the fsockopen function (DUH!).

The correct way to push using ssl taking the TextScreen.php sample is:

Code:
<?php
#
function push2phone($server,$phone,$data)
{
  $xml = "xml=".$data;
  $post = "POST / HTTP/1.1\r\n";
  $post .= "Host: $phone\r\n";
  $post .= "Referer: $server\r\n";
  $post .= "Connection: Keep-Alive\r\n";
  $post .= "Content-Type: text/xml\r\n";
  $post .= "Content-Length: ".strlen($xml)."\r\n\r\n";
  $fp = @fsockopen ( 'ssl://'.$phone, 443, $errno, $errstr, 5);
  if($fp)
  {
    fputs($fp, $post.$xml);
    flush();
    fclose($fp);
  }
}
##############################
$xml = "<YealinkIPPhoneTextScreen Beep=\"yes\">\n";
$xml .= "<Title>Push test</Title>\n";
$xml .= "<Text>This is a test for pushing text to a phone.</Text>\n";
$xml .= "</YealinkIPPhoneTextScreen>\n";
push2phone("10.0.0.1","10.0.0.2",$xml);
Reference URL's