Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
A
ademco_hb
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
captainwong
ademco_hb
Commits
0d379ea1
Commit
0d379ea1
authored
Apr 16, 2020
by
captainwong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
nonblocking send; disarm require user to input passwd
parent
2ff81537
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
34 additions
and
6 deletions
+34
-6
server_demo.cpp
server_demo/server_demo.cpp
+34
-6
No files found.
server_demo/server_demo.cpp
View file @
0d379ea1
...
@@ -52,6 +52,18 @@ size_t clientAdemcoId = 0;
...
@@ -52,6 +52,18 @@ size_t clientAdemcoId = 0;
std
::
mutex
mutex
=
{};
std
::
mutex
mutex
=
{};
std
::
vector
<
ADEMCO_EVENT
>
evntsWaiting4Send
=
{};
std
::
vector
<
ADEMCO_EVENT
>
evntsWaiting4Send
=
{};
char
pwd
[
1024
]
=
{};
int
setNonBlocking
(
SOCKET
socket
)
{
u_long
lngMode
=
1
;
int
ret
=
ioctl
(
socket
,
FIONBIO
,
(
u_long
*
)
&
lngMode
);
if
(
ret
!=
0
)
{
fprintf
(
stderr
,
"ioctl failed %d
\n
"
,
ret
);
return
ret
;
}
return
ret
;
}
int
main
(
int
argc
,
char
**
argv
)
int
main
(
int
argc
,
char
**
argv
)
{
{
...
@@ -79,10 +91,8 @@ int main(int argc, char** argv)
...
@@ -79,10 +91,8 @@ int main(int argc, char** argv)
sAddrIn
.
sin_addr
.
s_addr
=
INADDR_ANY
;
sAddrIn
.
sin_addr
.
s_addr
=
INADDR_ANY
;
auto
serverSock
=
socket
(
AF_INET
,
SOCK_STREAM
,
IPPROTO_TCP
);
auto
serverSock
=
socket
(
AF_INET
,
SOCK_STREAM
,
IPPROTO_TCP
);
u_long
lngMode
=
1
;
int
ret
=
setNonBlocking
(
serverSock
);
int
ret
=
ioctl
(
serverSock
,
FIONBIO
,
(
u_long
*
)
&
lngMode
);
if
(
ret
!=
0
)
{
if
(
ret
!=
0
)
{
fprintf
(
stderr
,
"ioctl failed %d
\n
"
,
ret
);
return
ret
;
return
ret
;
}
}
ret
=
bind
(
serverSock
,
(
struct
sockaddr
*
)
&
sAddrIn
,
sizeof
(
sAddrIn
));
ret
=
bind
(
serverSock
,
(
struct
sockaddr
*
)
&
sAddrIn
,
sizeof
(
sAddrIn
));
...
@@ -114,6 +124,10 @@ int main(int argc, char** argv)
...
@@ -114,6 +124,10 @@ int main(int argc, char** argv)
if
(
nfds
>
0
)
{
if
(
nfds
>
0
)
{
FD_CLR
(
serverSock
,
&
rfd
);
FD_CLR
(
serverSock
,
&
rfd
);
clientSock
=
accept
(
serverSock
,
(
struct
sockaddr
*
)
&
sForeignAddrIn
,
&
nLength
);
clientSock
=
accept
(
serverSock
,
(
struct
sockaddr
*
)
&
sForeignAddrIn
,
&
nLength
);
int
ret
=
setNonBlocking
(
clientSock
);
if
(
ret
!=
0
)
{
exit
(
0
);
}
printf
(
"Got connection from %s:%d, fd=%lld
\n
"
,
inet_ntoa
(
sForeignAddrIn
.
sin_addr
),
sForeignAddrIn
.
sin_port
,
clientSock
);
printf
(
"Got connection from %s:%d, fd=%lld
\n
"
,
inet_ntoa
(
sForeignAddrIn
.
sin_addr
),
sForeignAddrIn
.
sin_port
,
clientSock
);
}
}
};
};
...
@@ -247,9 +261,17 @@ int main(int argc, char** argv)
...
@@ -247,9 +261,17 @@ int main(int argc, char** argv)
char
buf
[
1024
];
char
buf
[
1024
];
AdemcoPacket
ap
;
AdemcoPacket
ap
;
for
(
auto
e
:
evntsWaiting4Send
)
{
for
(
auto
e
:
evntsWaiting4Send
)
{
auto
len
=
ap
.
make_hb
(
buf
,
sizeof
(
buf
),
1
,
clientAcct
,
clientAdemcoId
,
0
,
e
,
0
);
if
(
e
==
EVENT_DISARM
)
{
printf
(
"S:%s
\n
"
,
ap
.
toString
().
data
());
auto
xdata
=
makeXData
(
pwd
,
6
);
send
(
clientSock
,
buf
,
len
,
0
);
auto
len
=
ap
.
make_hb
(
buf
,
sizeof
(
buf
),
1
,
clientAcct
,
clientAdemcoId
,
0
,
e
,
0
,
xdata
);
printf
(
"S:%s
\n
"
,
ap
.
toString
().
data
());
send
(
clientSock
,
buf
,
len
,
0
);
}
else
{
auto
len
=
ap
.
make_hb
(
buf
,
sizeof
(
buf
),
1
,
clientAcct
,
clientAdemcoId
,
0
,
e
,
0
);
printf
(
"S:%s
\n
"
,
ap
.
toString
().
data
());
send
(
clientSock
,
buf
,
len
,
0
);
}
}
}
evntsWaiting4Send
.
clear
();
evntsWaiting4Send
.
clear
();
}
}
...
@@ -265,6 +287,11 @@ int main(int argc, char** argv)
...
@@ -265,6 +287,11 @@ int main(int argc, char** argv)
std
::
lock_guard
<
std
::
mutex
>
lg
(
mutex
);
std
::
lock_guard
<
std
::
mutex
>
lg
(
mutex
);
evntsWaiting4Send
.
push_back
(
EVENT_ARM
);
evntsWaiting4Send
.
push_back
(
EVENT_ARM
);
}
else
if
(
cmd
==
'd'
||
cmd
==
'D'
)
{
}
else
if
(
cmd
==
'd'
||
cmd
==
'D'
)
{
bool
pwd_ok
=
false
;
do
{
printf
(
"Input 6 digit password:"
);
scanf
(
"%s"
,
&
pwd
);
}
while
(
strlen
(
pwd
)
!=
6
);
std
::
lock_guard
<
std
::
mutex
>
lg
(
mutex
);
std
::
lock_guard
<
std
::
mutex
>
lg
(
mutex
);
evntsWaiting4Send
.
push_back
(
EVENT_DISARM
);
evntsWaiting4Send
.
push_back
(
EVENT_DISARM
);
}
else
if
(
cmd
==
'\r'
||
cmd
==
'\n'
)
{
}
else
if
(
cmd
==
'\r'
||
cmd
==
'\n'
)
{
...
@@ -277,5 +304,6 @@ int main(int argc, char** argv)
...
@@ -277,5 +304,6 @@ int main(int argc, char** argv)
}
}
}
}
close
(
serverSock
);
printf
(
"Bye!"
);
printf
(
"Bye!"
);
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment