<?php | |
/** | |
* Media uploader class | |
*/ | |
class WhatsMediaUploader | |
{ | |
protected static function sendData($host, $POST, $HEAD, $filepath, $mediafile, $TAIL) | |
{ | |
$sock = fsockopen("ssl://" . $host, 443); | |
fwrite($sock, $POST); | |
fwrite($sock, $HEAD); | |
//write file data | |
$buf = 1024; | |
$totalread = 0; | |
$fp = fopen($filepath, "r"); | |
while ($totalread < $mediafile['filesize']) { | |
$buff = fread($fp, $buf); | |
fwrite($sock, $buff, $buf); | |
$totalread += $buf; | |
} | |
//echo $TAIL; | |
fwrite($sock, $TAIL); | |
sleep(1); | |
$data = fgets($sock, 8192); | |
$data .= fgets($sock, 8192); | |
$data .= fgets($sock, 8192); | |
$data .= fgets($sock, 8192); | |
$data .= fgets($sock, 8192); | |
$data .= fgets($sock, 8192); | |
$data .= fgets($sock, 8192); | |
fclose($sock); | |
list($header, $body) = preg_split("/\R\R/", $data, 2); | |
$json = json_decode($body); | |
if ( ! is_null($json)) { | |
return $json; | |
} | |
return false; | |
} | |
public static function pushFile($uploadResponseNode, $messageContainer, $mediafile, $selfJID) | |
{ | |
//get vars | |
$url = $uploadResponseNode->getChild("media")->getAttribute("url"); | |
$filepath = $messageContainer["filePath"]; | |
$to = $messageContainer["to"]; | |
return self::getPostString($filepath, $url, $mediafile, $to, $selfJID); | |
} | |
protected static function getPostString($filepath, $url, $mediafile, $to, $from) | |
{ | |
$host = parse_url($url, PHP_URL_HOST); | |
//filename to md5 digest | |
$cryptoname = md5($filepath) . "." . $mediafile['fileextension']; | |
$boundary = "zzXXzzYYzzXXzzQQ"; | |
if (is_array($to)) { | |
$to = implode(',', $to); | |
} | |
$hBAOS = "--" . $boundary . "\r\n"; | |
$hBAOS .= "Content-Disposition: form-data; name=\"to\"\r\n\r\n"; | |
$hBAOS .= $to . "\r\n"; | |
$hBAOS .= "--" . $boundary . "\r\n"; | |
$hBAOS .= "Content-Disposition: form-data; name=\"from\"\r\n\r\n"; | |
$hBAOS .= $from . "\r\n"; | |
$hBAOS .= "--" . $boundary . "\r\n"; | |
$hBAOS .= "Content-Disposition: form-data; name=\"file\"; filename=\"" . $cryptoname . "\"\r\n"; | |
$hBAOS .= "Content-Type: " . $mediafile['filemimetype'] . "\r\n\r\n"; | |
$fBAOS = "\r\n--" . $boundary . "--\r\n"; | |
$contentlength = strlen($hBAOS) + strlen($fBAOS) + $mediafile['filesize']; | |
$POST = "POST " . $url . "\r\n"; | |
$POST .= "Content-Type: multipart/form-data; boundary=" . $boundary . "\r\n"; | |
$POST .= "Host: " . $host . "\r\n"; | |
$POST .= "User-Agent: " . Constants::WHATSAPP_USER_AGENT . "\r\n"; | |
$POST .= "Content-Length: " . $contentlength . "\r\n\r\n"; | |
return self::sendData($host, $POST, $hBAOS, $filepath, $mediafile, $fBAOS); | |
} | |
} |