function xmpp_connect($options, $access_token) { global $STREAM_XML, $AUTH_XML, $RESOURCE_XML, $SESSION_XML, $CLOSE_XML, $START_TLS; $fp = open_connection($options['server']); if (!$fp) { return false; } // initiates auth process (using X-FACEBOOK_PLATFORM) send_xml($fp, $STREAM_XML); if (!find_xmpp($fp, 'STREAM:STREAM')) { return false; } if (!find_xmpp($fp, 'MECHANISM', 'X-FACEBOOK-PLATFORM')) { return false; } // starting tls - MANDATORY TO USE OAUTH TOKEN!!!! send_xml($fp, $START_TLS); if (!find_xmpp($fp, 'PROCEED', null, $proceed)) { return false; } stream_socket_enable_crypto($fp, true, STREAM_CRYPTO_METHOD_TLS_CLIENT); send_xml($fp, $STREAM_XML); if (!find_xmpp($fp, 'STREAM:STREAM')) { return false; } if (!find_xmpp($fp, 'MECHANISM', 'X-FACEBOOK-PLATFORM')) { return false; } // gets challenge from server and decode it send_xml($fp, $AUTH_XML); if (!find_xmpp($fp, 'CHALLENGE', null, $challenge)) { return false; } $challenge = base64_decode($challenge); $challenge = urldecode($challenge); parse_str($challenge, $challenge_array); // creates the response array $resp_array = array('method' => $challenge_array['method'], 'nonce' => $challenge_array['nonce'], 'access_token' => $access_token, 'api_key' => $options['app_id'], 'call_id' => 0, 'v' => '1.0'); // creates signature $response = http_build_query($resp_array); // sends the response and waits for success $xml = '<response xmlns="urn:ietf:params:xml:ns:xmpp-sasl">' . base64_encode($response) . '</response>'; send_xml($fp, $xml); if (!find_xmpp($fp, 'SUCCESS')) { return false; } // finishes auth process send_xml($fp, $STREAM_XML); if (!find_xmpp($fp, 'STREAM:STREAM')) { return false; } if (!find_xmpp($fp, 'STREAM:FEATURES')) { return false; } send_xml($fp, $RESOURCE_XML); if (!find_xmpp($fp, 'JID')) { return false; } send_xml($fp, $SESSION_XML); if (!find_xmpp($fp, 'SESSION')) { return false; } // we made it! send_xml($fp, $CLOSE_XML); print "Authentication complete<br>"; fclose($fp); return true; }
function xmpp_send_msg($fp, $options) { global $CLOSE_XML, $MESSAGE_XML; echo 'Sent message: <strong>' . $options['msg'] . '</strong>, from ' . $options['uid'] . ' to ' . $options['recv_id']; send_xml($fp, sprintf($MESSAGE_XML, $options['uid'], $options['recv_id'], $options['msg'])); send_xml($fp, $CLOSE_XML); }