diff --git a/rvpn/genericlistener/conn_wedge.go b/rvpn/genericlistener/conn_wedge.go index edc174a..6a61bf4 100644 --- a/rvpn/genericlistener/conn_wedge.go +++ b/rvpn/genericlistener/conn_wedge.go @@ -55,6 +55,13 @@ func (w *WedgeConn) Buffered() int { //PeekAll -- // - get all the chars available // - pass then back -func (w *WedgeConn) PeekAll() ([]byte, error) { - return w.Peek(w.Buffered()) +func (w *WedgeConn) PeekAll() (buf []byte, err error) { + + _, err = w.Peek(1) + if err != nil { + return nil, err + } + + buf, err = w.Peek(w.Buffered()) + return } diff --git a/rvpn/genericlistener/status_req_type.go b/rvpn/genericlistener/status_req_type.go new file mode 100644 index 0000000..9d4944c --- /dev/null +++ b/rvpn/genericlistener/status_req_type.go @@ -0,0 +1,52 @@ +package genericlistener + +import "sync" + +type adminReqType string + +const ( + adminStatus adminReqType = "admin_status" + adminDomain adminReqType = "admin_domain" + adminDomains adminReqType = "admin_domains" + adminServer adminReqType = "admin_server" + adminServers adminReqType = "admin_servers" +) + +//AdminReqType -- +type AdminReqType struct { + mutex *sync.Mutex + RequestType map[adminReqType]int64 +} + +//NewAdminReqType -- Constructor +func NewAdminReqType() (p *AdminReqType) { + p = new(AdminReqType) + p.mutex = &sync.Mutex{} + p.RequestType = make(map[adminReqType]int64) + return +} + +func (p *AdminReqType) add(reqType adminReqType) { + p.mutex.Lock() + + defer p.mutex.Unlock() + + if _, ok := p.RequestType[reqType]; ok { + p.RequestType[reqType]++ + } else { + p.RequestType[reqType] = int64(1) + } +} + +func (p *AdminReqType) get(reqType adminReqType) (total int64) { + p.mutex.Lock() + + defer p.mutex.Unlock() + + if _, ok := p.RequestType[reqType]; ok { + total = p.RequestType[reqType] + } else { + total = 0 + } + return +}