From 2233e08ca118221707116fdf5ee00dbce79b8e0a Mon Sep 17 00:00:00 2001 From: Henry Camacho Date: Thu, 23 Mar 2017 18:02:38 -0500 Subject: [PATCH] =?UTF-8?q?Put=20the=201=20char=20peek=20back=20in.=20=20W?= =?UTF-8?q?ith=20TLS=20byte=20awaiting=20aren=E2=80=99t=20valid,=20however?= =?UTF-8?q?=20they=20are=20valid=20with=20non-tis.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rvpn/genericlistener/conn_wedge.go | 11 +++++- rvpn/genericlistener/status_req_type.go | 52 +++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 2 deletions(-) create mode 100644 rvpn/genericlistener/status_req_type.go 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 +}