ctlsock: add CtlSock API
This commit is contained in:
parent
f0184804f4
commit
7e51073400
@ -2,25 +2,60 @@
|
|||||||
// gocryptfs control socket interface. This interface can be
|
// gocryptfs control socket interface. This interface can be
|
||||||
// activated by passing `-ctlsock /tmp/my.sock` to gocryptfs on the
|
// activated by passing `-ctlsock /tmp/my.sock` to gocryptfs on the
|
||||||
// command line.
|
// command line.
|
||||||
|
// See gocryptfs-xray for a usage example.
|
||||||
package ctlsock
|
package ctlsock
|
||||||
|
|
||||||
// RequestStruct is sent by a client
|
import (
|
||||||
type RequestStruct struct {
|
"encoding/json"
|
||||||
EncryptPath string
|
"fmt"
|
||||||
DecryptPath string
|
"net"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (r *ResponseStruct) Error() string {
|
||||||
|
return fmt.Sprintf("errno %d: %s", r.ErrNo, r.ErrText)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ResponseStruct is sent by the server in response to a request
|
// CtlSock encapsulates a control socket
|
||||||
type ResponseStruct struct {
|
type CtlSock struct {
|
||||||
// Result is the resulting decrypted or encrypted path. Empty on error.
|
Conn net.Conn
|
||||||
Result string
|
}
|
||||||
// ErrNo is the error number as defined in errno.h.
|
|
||||||
// 0 means success and -1 means that the error number is not known
|
// New opens the socket at `socketPath` and stores it in a `CtlSock` object.
|
||||||
// (look at ErrText in this case).
|
func New(socketPath string) (*CtlSock, error) {
|
||||||
ErrNo int32
|
conn, err := net.DialTimeout("unix", socketPath, 1*time.Second)
|
||||||
// ErrText is a detailed error message.
|
if err != nil {
|
||||||
ErrText string
|
return nil, err
|
||||||
// WarnText contains warnings that may have been encountered while
|
}
|
||||||
// processing the message.
|
return &CtlSock{Conn: conn}, nil
|
||||||
WarnText string
|
}
|
||||||
|
|
||||||
|
// Query sends a request to the control socket returns the response.
|
||||||
|
func (c *CtlSock) Query(req *RequestStruct) (*ResponseStruct, error) {
|
||||||
|
c.Conn.SetDeadline(time.Now().Add(time.Second))
|
||||||
|
msg, err := json.Marshal(req)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
_, err = c.Conn.Write(msg)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
buf := make([]byte, 5000)
|
||||||
|
n, err := c.Conn.Read(buf)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
buf = buf[:n]
|
||||||
|
var resp ResponseStruct
|
||||||
|
json.Unmarshal(buf, &resp)
|
||||||
|
if resp.ErrNo != 0 {
|
||||||
|
return nil, &resp
|
||||||
|
}
|
||||||
|
return &resp, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Close closes the socket
|
||||||
|
func (c *CtlSock) Close() {
|
||||||
|
c.Conn.Close()
|
||||||
}
|
}
|
||||||
|
26
ctlsock/json_abi.go
Normal file
26
ctlsock/json_abi.go
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
package ctlsock
|
||||||
|
|
||||||
|
// RequestStruct is sent by a client (encoded as JSON).
|
||||||
|
// You cannot perform both encryption and decryption in the same request.
|
||||||
|
type RequestStruct struct {
|
||||||
|
// EncryptPath is the path that should be encrypted.
|
||||||
|
EncryptPath string
|
||||||
|
// DecryptPath is the path that should be decrypted.
|
||||||
|
DecryptPath string
|
||||||
|
}
|
||||||
|
|
||||||
|
// ResponseStruct is sent by the server in response to a request
|
||||||
|
// (encoded as JSON).
|
||||||
|
type ResponseStruct struct {
|
||||||
|
// Result is the resulting decrypted or encrypted path. Empty on error.
|
||||||
|
Result string
|
||||||
|
// ErrNo is the error number as defined in errno.h.
|
||||||
|
// 0 means success and -1 means that the error number is not known
|
||||||
|
// (look at ErrText in this case).
|
||||||
|
ErrNo int32
|
||||||
|
// ErrText is a detailed error message.
|
||||||
|
ErrText string
|
||||||
|
// WarnText contains warnings that may have been encountered while
|
||||||
|
// processing the message.
|
||||||
|
WarnText string
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user