\r\n". "". "". "". "".$target."". "30". "". "". "". "". "". ""; $post = "POST /GWS/Groove/1.0/Contacts/ HTTP/1.0\r\n" . "Host: ".$host."\r\n". "User-Agent: presence.php\r\n". "Accept: text/xml\r\n". "Accept: multipart/*\r\n". "Content-Length: " . strlen($body) . "\r\n". "Content-Type: text/xml; charset=utf-8\r\n". "SOAPAction: \"http://www.groove.net/Groove/1.0/Contacts#Read\"\r\n"; $payload = $post."\r\n".$body; // Open a socket and send the HTTP request $fp = fsockopen($host, $port, $errno, $errstr); if (!$fp) { return "error: can't open"; } if( !fputs($fp, $payload, strlen($payload))) { fclose($fp); return "error: can't put"; } // Expected response: // // // // // // grooveIdentity://bmbsqsp2snq79wjxibjc89wt4t5xgfdi@hfptest/GWS/Groove/1.0/vCard/grooveIdentity/bmbsqsp2snq79wjxibjc89wt4t5xgfdi@Online // grooveIdentity://c4epcjm2984aq77fxwsfpxd7fzq9mnga@Some Person/Groove/GWS/Groove/1.0/vCard/grooveIdentity/c4epcjm2984aq77fxwsfpxd7fzq9mnga@OffLine // // // // $resp = ""; while ($chunk = fread($fp, 32768)) { $resp .= $chunk; } fclose($fp); // separate content from HTTP headers if(preg_match("/([^<]*?)\r?\n\r?\n(<.*>)/s",$resp,$result)) { $data = $result[2]; } else { return "error: can't separate headers\r\n".$resp; } if(strlen($data) == 0) { return "error: no data"; } return $data; } function onStartElement($parser,$elname,$attrs='') { global $tag; $tag = $elname; } function onEndElement($parser,$elname,$attrs='') { } function onCharacterData($parser,$data) { global $tag; global $username; global $responseText; global $name; if( $tag=="Name" ) { $username = $data; } if( $tag=="Awareness" & $username==$name ) { $responseText = $data; } } function printResponse() { global $name; global $responseText; if( !isset( $responseText ) ) { $responseText = "Unknown"; } print "\r\n". "\r\n". "".$responseText."\r\n"; switch( strtolower($responseText) ) { case "online": print "http://www.cabezal.com/presence/Online.png\r\n"; break; case "offline": print "http://www.cabezal.com/presence/Offline.png\r\n"; break; default: break; } print "".$name."\r\n". ""; } if( !isset($user) ) { global $responseText; $responseText="No username specified"; $name="Unspecified"; } else { $xml = doContact( $gwstarget ); $parser = xml_parser_create(); xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0); xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, 'UTF-8'); xml_set_element_handler($parser, 'onStartElement','onEndElement'); xml_set_character_data_handler($parser, 'onCharacterData'); if( !xml_parse($parser,$xml,true)) { global $responseText; $responseText = "XML error '". xml_error_string(xml_get_error_code($parser)). "' at line ". xml_get_current_line_number($parser); } xml_parser_free($parser); } printResponse(); ?>