@@ -9,6 +9,9 @@ package goesl
9
9
import (
10
10
"bufio"
11
11
"fmt"
12
+ "io"
13
+ "net"
14
+ "strconv"
12
15
"time"
13
16
)
14
17
@@ -26,45 +29,49 @@ type Client struct {
26
29
// EstablishConnection - Will attempt to establish connection against freeswitch and create new SocketConnection
27
30
func (c * Client ) EstablishConnection () error {
28
31
conn , err := c .Dial (c .Proto , c .Addr , time .Duration (c .Timeout * int (time .Second )))
32
+ if err != nil {
33
+ return err
34
+ }
29
35
30
36
c .SocketConnection = SocketConnection {
31
37
Conn : conn ,
32
38
err : make (chan error ),
33
39
m : make (chan * Message ),
34
40
}
35
41
36
- return err
42
+ return nil
37
43
}
38
44
39
45
// Authenticate - Method used to authenticate client against freeswitch. In case of any errors durring so
40
46
// we will return error.
41
47
func (c * Client ) Authenticate () error {
42
48
43
49
m , err := newMessage (bufio .NewReaderSize (c , ReadBufferSize ), false )
44
-
45
50
if err != nil {
46
51
Error (ECouldNotCreateMessage , err )
47
52
return err
48
53
}
49
54
50
55
cmr , err := m .tr .ReadMIMEHeader ()
51
-
52
- Debug ("A: %v %v " , cmr , err )
53
-
54
56
if err != nil && err .Error () != "EOF" {
55
57
Error (ECouldNotReadMIMEHeaders , err )
56
58
return err
57
59
}
58
60
61
+ Debug ("A: %v\n " , cmr )
62
+
59
63
if cmr .Get ("Content-Type" ) != "auth/request" {
60
64
Error (EUnexpectedAuthHeader , cmr .Get ("Content-Type" ))
61
65
return fmt .Errorf (EUnexpectedAuthHeader , cmr .Get ("Content-Type" ))
62
66
}
63
67
64
- fmt .Fprintf (c , "auth %s\r \n \r \n " , c .Passwd )
68
+ s := "auth " + c .Passwd + "\r \n \r \n "
69
+ _ , err = io .WriteString (c , s )
70
+ if err != nil {
71
+ return err
72
+ }
65
73
66
74
am , err := m .tr .ReadMIMEHeader ()
67
-
68
75
if err != nil && err .Error () != "EOF" {
69
76
Error (ECouldNotReadMIMEHeaders , err )
70
77
return err
@@ -80,22 +87,24 @@ func (c *Client) Authenticate() error {
80
87
81
88
// NewClient - Will initiate new client that will establish connection and attempt to authenticate
82
89
// against connected freeswitch server
83
- func NewClient (host string , port uint , passwd string , timeout int ) (Client , error ) {
90
+ func NewClient (host string , port uint , passwd string , timeout int ) (* Client , error ) {
84
91
client := Client {
85
92
Proto : "tcp" , // Let me know if you ever need this open up lol
86
- Addr : fmt . Sprintf ( "%s:%d" , host , port ),
93
+ Addr : net . JoinHostPort ( host , strconv . Itoa ( int ( port )) ),
87
94
Passwd : passwd ,
88
95
Timeout : timeout ,
89
96
}
90
97
91
- if err := client .EstablishConnection (); err != nil {
92
- return client , err
98
+ err := client .EstablishConnection ()
99
+ if err != nil {
100
+ return nil , err
93
101
}
94
102
95
- if err := client .Authenticate (); err != nil {
103
+ err = client .Authenticate ()
104
+ if err != nil {
96
105
client .Close ()
97
- return client , err
106
+ return nil , err
98
107
}
99
108
100
- return client , nil
109
+ return & client , nil
101
110
}
0 commit comments