mirror of
https://github.com/mumble-voip/grumble.git
synced 2025-12-20 14:20:00 -08:00
Better client panics.
This commit is contained in:
parent
e00f910393
commit
aad95834a2
1 changed files with 24 additions and 17 deletions
41
client.go
41
client.go
|
|
@ -115,9 +115,15 @@ func (client *Client) ShownName() string {
|
||||||
return client.Username
|
return client.Username
|
||||||
}
|
}
|
||||||
|
|
||||||
// Something invalid happened on the wire.
|
// Log a panic and disconnect the client.
|
||||||
func (client *Client) Panic(reason string) {
|
func (client *Client) Panic(v ...interface{}) {
|
||||||
client.Printf("panic: %v", reason)
|
client.Print(v)
|
||||||
|
client.Disconnect()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Log a formatted panic and disconnect the client.
|
||||||
|
func (client *Client) Panicf(format string, v ...interface{}) {
|
||||||
|
client.Printf(format, v)
|
||||||
client.Disconnect()
|
client.Disconnect()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -145,6 +151,8 @@ func (client *Client) disconnect(kicked bool) {
|
||||||
<-client.doneSending
|
<-client.doneSending
|
||||||
close(client.msgchan)
|
close(client.msgchan)
|
||||||
|
|
||||||
|
client.Printf("Disconnected")
|
||||||
|
|
||||||
client.conn.Close()
|
client.conn.Close()
|
||||||
client.server.RemoveClient(client, kicked)
|
client.server.RemoveClient(client, kicked)
|
||||||
}
|
}
|
||||||
|
|
@ -185,21 +193,18 @@ func (client *Client) readProtoMessage() (msg *Message, err os.Error) {
|
||||||
// Read the message type (16-bit big-endian unsigned integer)
|
// Read the message type (16-bit big-endian unsigned integer)
|
||||||
err = binary.Read(client.reader, binary.BigEndian, &kind)
|
err = binary.Read(client.reader, binary.BigEndian, &kind)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
client.Panic("Unable to read packet kind")
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read the message length (32-bit big-endian unsigned integer)
|
// Read the message length (32-bit big-endian unsigned integer)
|
||||||
err = binary.Read(client.reader, binary.BigEndian, &length)
|
err = binary.Read(client.reader, binary.BigEndian, &length)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
client.Panic("Unable to read packet length")
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
buf := make([]byte, length)
|
buf := make([]byte, length)
|
||||||
_, err = io.ReadFull(client.reader, buf)
|
_, err = io.ReadFull(client.reader, buf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
client.Panic("Unable to read packet content")
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -243,7 +248,7 @@ func (c *Client) sendPermissionDeniedTypeUser(kind string, user *Client) {
|
||||||
}
|
}
|
||||||
d, err := proto.Marshal(pd)
|
d, err := proto.Marshal(pd)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.Panic(err.String())
|
c.Panicf("%v", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
c.msgchan <- &Message{
|
c.msgchan <- &Message{
|
||||||
|
|
@ -251,7 +256,7 @@ func (c *Client) sendPermissionDeniedTypeUser(kind string, user *Client) {
|
||||||
kind: MessagePermissionDenied,
|
kind: MessagePermissionDenied,
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
c.Panic("Unknown permission denied type.")
|
c.Panicf("Unknown permission denied type.")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -264,7 +269,7 @@ func (c *Client) sendPermissionDenied(who *Client, where *Channel, what Permissi
|
||||||
Type: mumbleproto.NewPermissionDenied_DenyType(mumbleproto.PermissionDenied_Permission),
|
Type: mumbleproto.NewPermissionDenied_DenyType(mumbleproto.PermissionDenied_Permission),
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.Panic(err.String())
|
c.Panicf(err.String())
|
||||||
}
|
}
|
||||||
c.msgchan <- &Message{
|
c.msgchan <- &Message{
|
||||||
buf: d,
|
buf: d,
|
||||||
|
|
@ -404,7 +409,7 @@ func (client *Client) sender() {
|
||||||
err := client.sendMessage(msg)
|
err := client.sendMessage(msg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// fixme(mkrautz): This is a deadlock waiting to happen.
|
// fixme(mkrautz): This is a deadlock waiting to happen.
|
||||||
client.Panic("Unable to send message to client")
|
client.Panicf("Unable to send message to client")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -420,10 +425,9 @@ func (client *Client) receiver() {
|
||||||
msg, err := client.readProtoMessage()
|
msg, err := client.readProtoMessage()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if err == os.EOF {
|
if err == os.EOF {
|
||||||
client.Printf("Disconnected.")
|
|
||||||
client.Disconnect()
|
client.Disconnect()
|
||||||
} else {
|
} else {
|
||||||
client.Printf("Client error")
|
client.Panicf("%v", err)
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
@ -442,7 +446,11 @@ func (client *Client) receiver() {
|
||||||
// Try to read the next message in the pool
|
// Try to read the next message in the pool
|
||||||
msg, err := client.readProtoMessage()
|
msg, err := client.readProtoMessage()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
client.Panic(err.String())
|
if err == os.EOF {
|
||||||
|
client.Disconnect()
|
||||||
|
} else {
|
||||||
|
client.Panicf("%v", err)
|
||||||
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -477,10 +485,9 @@ func (client *Client) receiver() {
|
||||||
msg, err := client.readProtoMessage()
|
msg, err := client.readProtoMessage()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if err == os.EOF {
|
if err == os.EOF {
|
||||||
client.Printf("Disconnected")
|
|
||||||
client.Disconnect()
|
client.Disconnect()
|
||||||
} else {
|
} else {
|
||||||
client.Printf("Client error")
|
client.Panicf("%v", err)
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
@ -488,7 +495,7 @@ func (client *Client) receiver() {
|
||||||
version := &mumbleproto.Version{}
|
version := &mumbleproto.Version{}
|
||||||
err = proto.Unmarshal(msg.buf, version)
|
err = proto.Unmarshal(msg.buf, version)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
client.Panic("Unable to unmarshal client version packet.")
|
client.Panicf("%v", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -558,7 +565,7 @@ func (client *Client) sendChannelTree(channel *Channel) {
|
||||||
|
|
||||||
err := client.sendProtoMessage(MessageChannelState, chanstate)
|
err := client.sendProtoMessage(MessageChannelState, chanstate)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
client.Panic(err.String())
|
client.Panicf("%v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, subchannel := range channel.children {
|
for _, subchannel := range channel.children {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue