function stdapi_fs_sha1($req, &$pkt)
 {
     $path_tlv = packet_get_tlv($req, TLV_TYPE_FILE_PATH);
     $path = cononicalize_path($path_tlv['value']);
     if (is_callable("sha1_file")) {
         $sha1 = sha1_file($path);
     } else {
         $sha1 = sha1(file_get_contents($path));
     }
     $sha1 = pack("H*", $sha1);
     # Ghetto abuse of file name type to indicate the sha1 result
     packet_add_tlv($pkt, create_tlv(TLV_TYPE_FILE_NAME, $sha1));
     return ERROR_SUCCESS;
 }
 function stdapi_fs_search($req, &$pkt)
 {
     my_print("doing search");
     $root_tlv = packet_get_tlv($req, TLV_TYPE_SEARCH_ROOT);
     $root = cononicalize_path($root_tlv['value']);
     $glob_tlv = packet_get_tlv($req, TLV_TYPE_SEARCH_GLOB);
     $glob = cononicalize_path($glob_tlv['value']);
     $recurse_tlv = packet_get_tlv($req, TLV_TYPE_SEARCH_RECURSE);
     $recurse = $recurse_tlv['value'];
     if (!$root) {
         $root = '.';
     }
     my_print("glob: {$glob}, root: {$root}, recurse: {$recurse}");
     $flags = GLOB_PATH;
     if ($recurse) {
         $flags |= GLOB_RECURSE;
     }
     $files = safe_glob($root . "/" . $glob, $flags);
     if ($files and is_array($files)) {
         dump_array($files);
         foreach ($files as $file) {
             $file_tlvs = "";
             $s = stat($file);
             $p = dirname($file);
             $f = basename($file);
             $file_tlvs .= tlv_pack(create_tlv(TLV_TYPE_FILE_PATH, $p));
             $file_tlvs .= tlv_pack(create_tlv(TLV_TYPE_FILE_NAME, $f));
             $file_tlvs .= tlv_pack(create_tlv(TLV_TYPE_FILE_SIZE, $s['size']));
             packet_add_tlv($pkt, create_tlv(TLV_TYPE_SEARCH_RESULTS, $file_tlvs));
         }
     }
     return ERROR_SUCCESS;
 }
 function stdapi_fs_sha1($req, &$pkt)
 {
     $path_tlv = packet_get_tlv($req, TLV_TYPE_FILE_PATH);
     $path = cononicalize_path($path_tlv['value']);
     if (is_callable("sha1_file")) {
         $sha1 = sha1_file($path);
     } else {
         $sha1 = sha1(file_get_contents($path));
     }
     $sha1 = pack("H*", $sha1);
     packet_add_tlv($pkt, create_tlv(TLV_TYPE_FILE_HASH, $sha1));
     return ERROR_SUCCESS;
 }
 function stdapi_fs_delete_file($req, &$pkt)
 {
     my_print("doing delete");
     $path_tlv = packet_get_tlv($req, TLV_TYPE_FILE_PATH);
     $path = cononicalize_path($path_tlv['value']);
     if ($path && is_file($path)) {
         $worked = @unlink($path);
         return $worked ? ERROR_SUCCESS : ERROR_FAILURE;
     } else {
         return ERROR_FAILURE;
     }
 }