Skip to content

Commit

Permalink
Implement frames
Browse files Browse the repository at this point in the history
  • Loading branch information
ysugimoto committed Apr 4, 2016
1 parent cd922b3 commit ef79b03
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 41 deletions.
8 changes: 4 additions & 4 deletions src/aun/connection.go
Expand Up @@ -144,13 +144,13 @@ func (c *Connection) handleFrame(frame *Frame) error {
}
message := c.frameStack.synthesize()
c.frameStack = FrameStack{}
_, err := BuildFrame(message, c.maxDataSize)
frames, err := BuildFrame(message, c.maxDataSize)
if err != nil {
return err
}
//for _, frame := range frames {
// c.broadcast <- NewMessage(frame.toFrameBytes())
//}
for _, frame := range frames {
c.broadcast <- NewMessage(frame.toFrameBytes())
}
// closing frame
case 8:
c.Close <- struct{}{}
Expand Down
42 changes: 11 additions & 31 deletions src/aun/frame.go
@@ -1,10 +1,5 @@
package aun

import (
"fmt"
"strconv"
)

// Message frame spec:
//
// 0 1 2 3
Expand All @@ -26,6 +21,10 @@ import (
// | Payload Data continued ... |
// +---------------------------------------------------------------+

import (
"encoding/binary"
)

type Frame struct {
Fin int
RSV1 int
Expand Down Expand Up @@ -101,41 +100,24 @@ func (f *Frame) parse(buffer []byte) error {
f.Mask = (bits >> 7) & 1
f.PayloadLength = bits & 0x7F

fmt.Println(bits, f.PayloadLength)
index := 2
switch {
case f.PayloadLength == 126:
bin := ""
for i := 0; i < 2; i++ {
bin += fmt.Sprintf("%b", buffer[index+i])
}
length, err := strconv.ParseInt(bin, 2, 0)
if err != nil {
return err
}
f.PayloadLength = int(length)
n := binary.BigEndian.Uint16(buffer[index:(index + 2)])
f.PayloadLength = int(n)
index += 2
case f.PayloadLength == 127:
bin := ""
for i := 0; i < 8; i++ {
bin += fmt.Sprintf("%b", buffer[index+i])
}
length, err := strconv.ParseInt(bin, 2, 0)
if err != nil {
return err
}
f.PayloadLength = int(length)
n := binary.BigEndian.Uint64(buffer[index:(index + 8)])
f.PayloadLength = int(n)
index += 8
}

if f.Mask > 0 {
f.MaskingKey = buffer[index:(index + 4)]
index += 4
}

if f.Mask > 0 {
payload := buffer[index:(index + f.PayloadLength)]
for i := 0; i < len(payload); i++ {
size := len(payload)
for i := 0; i < size; i++ {
f.PayloadData = append(
f.PayloadData,
byte((int(payload[i]) ^ int(f.MaskingKey[i%4]))),
Expand All @@ -145,8 +127,6 @@ func (f *Frame) parse(buffer []byte) error {
f.PayloadData = buffer[index:(index + f.PayloadLength)]
}

fmt.Println(string(f.PayloadData))

return nil
}

Expand Down Expand Up @@ -177,7 +157,7 @@ func (f *Frame) toFrameBytes() (data []byte) {
byte((f.PayloadLength>>8)&0xFF),
byte((f.PayloadLength)&0xFF),
)
case f.PayloadLength > 126 && f.PayloadLength < 65535:
case f.PayloadLength > 126 && f.PayloadLength <= 65535:
bin |= 126
data = append(data, byte(bin))
// extra payload length of 2 bytes
Expand Down
4 changes: 0 additions & 4 deletions src/aun/server.go
Expand Up @@ -45,27 +45,23 @@ func (s *Server) Listen(maxDataSize int) (err error) {
for {
select {
case msg := <-s.broadcast:
fmt.Println("broadcast")
s.mutex.Lock()
for c, _ := range s.connections {
c.Write <- msg
}
s.mutex.Unlock()
case c := <-s.manager:
fmt.Println("leave")
s.mutex.Lock()
if _, ok := s.connections[c]; ok {
delete(s.connections, c)
}
s.mutex.Unlock()
case c := <-s.join:
fmt.Println("Join")
s.mutex.Lock()
s.connections[c] = true
s.mutex.Unlock()
}
}
fmt.Println("close")
return nil
}

Expand Down
4 changes: 2 additions & 2 deletions src/aun/valid.go
Expand Up @@ -21,11 +21,11 @@ func isValidHandshake(req *Request) bool {
fmt.Println(3)
return false
}
if !req.HasHeader("Upgrade") || strings.ToLower(req.Header("Upgrade")) != "websocket" {
if !req.HasHeader("Upgrade") || !strings.Contains(strings.ToLower(req.Header("Upgrade")), "websocket") {
fmt.Println(4)
return false
}
if !req.HasHeader("Connection") || strings.ToLower(req.Header("Connection")) != "upgrade" {
if !req.HasHeader("Connection") || !strings.Contains(strings.ToLower(req.Header("Connection")), "upgrade") {
fmt.Println(5)
return false
}
Expand Down

0 comments on commit ef79b03

Please sign in to comment.