prepare("SELECT address, port, lastSeen FROM gates WHERE id=:gate"); if(!$select->execute(array(":gate" => $gate))) error("Unable to retrieve gate details"); if($g = $select->fetch()) { if(intval(strtotime($g['lastSeen'])) < time() - $gateTimeout) error("Gate is down"); $insert = $db->prepare("INSERT INTO `sent` (`recipient`, `text`, `status`, `gate`) VALUES (:recipient, :text, :status, :gate)"); if(!$insert->execute(array(":recipient" => $to, ":text" => $text, ":status" => 0, ":gate" => $gate))) error("Failed to save message"); else { $id = intval($db->lastInsertId()); $out = http_get("http:/"."/".$g['address'].":".$g['port']."/send.php?to=".urlencode($to)."&text=".urlencode($text)."&id=".$id, array("timeout" => 10, "connecttimeout" => 10)); if($out == "") { $update = $db->prepare("UPDATE sent SET `status`=2, `timeStatus`=NOW() WHERE `id`=:id"); if(!$update->execute(array(":id" => $id))) error("Failed to update database after failed to contact gate (general failure)"); else echo json_encode(array("id" => $id, "status" => 2)); } else { $out = json_decode(http_parse_message($out)->body); if(isset($out->error)) { $update = $db->prepare("UPDATE sent SET `status`=7, `timeStatus`=NOW() WHERE `id`=:id"); if(!$update->execute(array(":id" => $id))) error("Failed to update database after failed to contact gate (general failure)"); else echo json_encode(array("id" => $id, "status" => 7, "error" => $out->error)); } else { $status = 0; $maxWait *= 1000; do { $select = $db->prepare("SELECT status FROM sent WHERE id=:id"); if($select->execute(array(":id" => $id))) if($f = $select->fetch()) $status = $f['status']; $maxWait -= 100; if($maxWait > 0) usleep(100000); } while($maxWait > 0 && $status == 0); echo json_encode(array("id" => $id, "status" => $status)); } } } } else error("Gate not found"); ?>