Show
Ignore:
Timestamp:
08/29/08 13:27:54 (5 years ago)
Author:
Cyrus
Message:

Completed first version of JSON-RPC API

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • ff-luci/trunk/modules/rpc/luasrc/controller/rpc.lua

    r2956 r3000  
    1717local pairs = pairs 
    1818local print = print 
     19local pcall = pcall 
     20local table = table 
    1921 
    2022module "luci.controller.rpc" 
     
    8789function rpc_fs() 
    8890    local util    = require "luci.util" 
    89     local fs      = util.clone(require "luci.fs") 
     91    local io      = require "io" 
     92    local fs2     = util.clone(require "luci.fs") 
    9093    local jsonrpc = require "luci.jsonrpc" 
    9194    local http    = require "luci.http" 
    9295    local ltn12   = require "luci.ltn12" 
    93      
    94     function fs.readfile(filename) 
    95         if not pcall(require, "mime") then 
     96 
     97    function fs2.readfile(filename) 
     98        local stat, mime = pcall(require, "mime") 
     99        if not stat then 
    96100            error("Base64 support not available. Please install LuaSocket.") 
    97101        end 
    98          
    99         return ltn12.source.chain(ltn12.source.file(filename), mime.encode("base64")) 
     102 
     103        local fp = io.open(filename) 
     104        if not fp then 
     105            return nil 
     106        end 
     107 
     108        local output = {} 
     109        local sink = ltn12.sink.table(output) 
     110        local source = ltn12.source.chain(ltn12.source.file(fp), mime.encode("base64")) 
     111        return ltn12.pump.all(source, sink) and table.concat(output) 
    100112    end 
    101113     
    102     function fs.writefile(filename, data) 
    103         if not pcall(require, "mime") then 
     114    function fs2.writefile(filename, data) 
     115        local stat, mime = pcall(require, "mime") 
     116        if not stat then 
    104117            error("Base64 support not available. Please install LuaSocket.") 
    105118        end 
    106      
    107         local sink = ltn12.sink.chain(mime.decode("base64"), ltn12.sink.file(filename)) 
    108         return ltn12.pump.all(ltn12.source.string(data), sink) 
     119 
     120        local  file = io.open(filename, "w") 
     121        local  sink = file and ltn12.sink.chain(mime.decode("base64"), ltn12.sink.file(file)) 
     122        return sink and ltn12.pump.all(ltn12.source.string(data), sink) or false 
    109123    end 
    110124     
    111125    http.prepare_content("application/json") 
    112     ltn12.pump.all(jsonrpc.handle(fs, http.source()), http.write) 
     126    ltn12.pump.all(jsonrpc.handle(fs2, http.source()), http.write) 
    113127end 
    114128