implemented client peer deletion

This commit is contained in:
hyung-hwan 2024-12-01 19:11:12 +09:00
parent 4d927b9a7f
commit 18b3028a46
2 changed files with 32 additions and 9 deletions

View File

@ -386,7 +386,6 @@ func (ctl *client_ctl_client_conns_id_routes_id) ServeHTTP(w http.ResponseWriter
switch req.Method {
case http.MethodGet:
var r *ClientRoute
r = cts.FindClientRouteById(uint32(route_nid))
if r == nil {
status_code = http.StatusNotFound; w.WriteHeader(status_code)
@ -401,13 +400,8 @@ func (ctl *client_ctl_client_conns_id_routes_id) ServeHTTP(w http.ResponseWriter
if err != nil { goto oops }
case http.MethodDelete:
err = cts.RemoveClientRouteById(uint32(route_nid))
if err != nil {
status_code = http.StatusNotFound; w.WriteHeader(status_code)
if err = je.Encode(json_errmsg{Text: err.Error()}); err != nil { goto oops }
} else {
cts.ReqStop()
status_code = http.StatusNoContent; w.WriteHeader(status_code)
}
default:
status_code = http.StatusBadRequest; w.WriteHeader(status_code)
@ -483,7 +477,9 @@ func (ctl *client_ctl_client_conns_id_routes_id_peers) ServeHTTP(w http.Response
status_code = http.StatusOK; w.WriteHeader(status_code)
if err = je.Encode(jcp); err != nil { goto oops }
// TODO: implemente MethodDelete to support forced disconnect from the peer.
case http.MethodDelete:
r.ReqStopAllClientPeerConns()
status_code = http.StatusNoContent; w.WriteHeader(status_code)
default:
status_code = http.StatusBadRequest; w.WriteHeader(status_code)
@ -560,6 +556,10 @@ func (ctl *client_ctl_client_conns_id_routes_id_peers_id) ServeHTTP(w http.Respo
status_code = http.StatusOK; w.WriteHeader(status_code)
if err = je.Encode(jcp); err != nil { goto oops }
case http.MethodDelete:
p.ReqStop()
status_code = http.StatusNoContent; w.WriteHeader(status_code)
default:
status_code = http.StatusBadRequest; w.WriteHeader(status_code)
}

View File

@ -180,6 +180,29 @@ func (r *ClientRoute) RemoveClientPeerConn(ptc *ClientPeerConn) error {
return nil
}
func (r *ClientRoute) RemoveAllClientPeerConns() {
var c *ClientPeerConn
r.ptc_mtx.Lock()
defer r.ptc_mtx.Unlock()
for _, c = range r.ptc_map {
delete(r.ptc_map, c.conn_id)
c.ReqStop()
}
}
func (r *ClientRoute) ReqStopAllClientPeerConns() {
var c *ClientPeerConn
r.ptc_mtx.Lock()
defer r.ptc_mtx.Unlock()
for _, c = range r.ptc_map {
c.ReqStop()
}
}
func (r *ClientRoute) FindClientPeerConnById(conn_id uint32) *ClientPeerConn {
var c *ClientPeerConn
var ok bool