Пример #1
0
/**
* query storage server to upload file
* @param $tracker_server the connected tracker server (assoc array)
* @param $storage_server return the storage server (assoc array, not connected)
* @param $group_name the group to upload file to, can be empty
* @return 0 for success, none zero (errno) for fail
*/
function tracker_query_storage_store($tracker_server, &$storage_server, $group_name)
{
    if (empty($group_name)) {
        $cmd = TRACKER_PROTO_CMD_SERVICE_QUERY_STORE_WITHOUT_GROUP;
        $out_len = 0;
    } else {
        $cmd = TRACKER_PROTO_CMD_SERVICE_QUERY_STORE_WITH_GROUP;
        $out_len = FDFS_GROUP_NAME_MAX_LEN;
    }
    if (($result = fdfs_send_header($tracker_server, $out_len, $cmd, 0)) != 0) {
        return $result;
    }
    if (!empty($group_name)) {
        $groupname_len = strlen($group_name);
        if ($groupname_len >= FDFS_GROUP_NAME_MAX_LEN) {
            $body = substr($group_name, 0, FDFS_GROUP_NAME_MAX_LEN);
        } else {
            $body = $group_name;
            $body .= str_repeat("", FDFS_GROUP_NAME_MAX_LEN - $groupname_len);
        }
        if (fwrite($tracker_server['sock'], $body, FDFS_GROUP_NAME_MAX_LEN) != FDFS_GROUP_NAME_MAX_LEN) {
            error_log("server: {$server['ip_addr']}:{$server['port']}, " . "send data fail");
            return FDFS_EIO;
        }
    }
    if (($result = fdfs_recv_response($tracker_server, TRACKER_QUERY_STORAGE_STORE_BODY_LEN, $in_buff, $in_bytes)) != 0) {
        return $result;
    }
    $storage_server = array('ip_addr' => trim(substr($in_buff, FDFS_GROUP_NAME_MAX_LEN, FDFS_IPADDR_SIZE - 1)), 'port' => fdfs_buff2long(substr($in_buff, FDFS_GROUP_NAME_MAX_LEN + FDFS_IPADDR_SIZE - 1, FDFS_PROTO_PKG_LEN_SIZE)), 'store_path_index' => ord(substr($in_buff, FDFS_GROUP_NAME_MAX_LEN + FDFS_IPADDR_SIZE - 1 + FDFS_PROTO_PKG_LEN_SIZE)), 'sock' => -1);
    return 0;
}
Пример #2
0
/**
* send QUIT command to server
* @param $server the connected server (assoc array)
* @return 0 for success, none zero (errno) for fail
*/
function fdfs_quit($server)
{
    return fdfs_send_header($server, 0, FDFS_PROTO_CMD_QUIT, 0);
}