-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathclient.c
174 lines (124 loc) · 3.31 KB
/
client.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
/****************/
/* Your Name */
/* Date */
/* CS 244B */
/* Spring 2014 */
/****************/
#define DEBUG
#include <stdio.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <errno.h>
#include <unistd.h>
#include <assert.h>
#include <iostream>
#include <client.h>
using namespace std;
Client myClient;
/* ------------------------------------------------------------------ */
void sendTestPacket(Client *M)
{
cout << "sending packet "<<M->theSocket() <<endl;
RFPacket pack;
pack.type = 0;
memset(pack.body, 0, sizeof(pack.body));
strcpy((char *)&pack.body, "Client Hello World\n");
sendPacket(M, &pack);
}
int
InitReplFs( unsigned short portNum, int packetLoss, int numServers ) {
#ifdef DEBUG
printf( "InitReplFs: Port number %d, packet loss %d percent, %d servers\n",
portNum, packetLoss, numServers );
#endif
/****************************************************/
/* Initialize network access, local state, etc. */
/****************************************************/
netInit(&myClient);
sendTestPacket(&myClient);
return( NormalReturn );
}
/* ------------------------------------------------------------------ */
int
OpenFile( char * fileName ) {
int fd;
ASSERT( fileName );
#ifdef DEBUG
printf( "OpenFile: Opening File '%s'\n", fileName );
#endif
fd = open( fileName, O_WRONLY|O_CREAT, S_IRUSR|S_IWUSR );
#ifdef DEBUG
if ( fd < 0 )
perror( "OpenFile" );
#endif
return( fd );
}
/* ------------------------------------------------------------------ */
int
WriteBlock( int fd, char * buffer, int byteOffset, int blockSize ) {
//char strError[64];
int bytesWritten;
ASSERT( fd >= 0 );
ASSERT( byteOffset >= 0 );
ASSERT( buffer );
ASSERT( blockSize >= 0 && blockSize < MaxBlockLength );
#ifdef DEBUG
printf( "WriteBlock: Writing FD=%d, Offset=%d, Length=%d\n",
fd, byteOffset, blockSize );
#endif
if ( lseek( fd, byteOffset, SEEK_SET ) < 0 ) {
perror( "WriteBlock Seek" );
return(ErrorReturn);
}
if ( ( bytesWritten = write( fd, buffer, blockSize ) ) < 0 ) {
perror( "WriteBlock write" );
return(ErrorReturn);
}
return( bytesWritten );
}
/* ------------------------------------------------------------------ */
int
Commit( int fd ) {
ASSERT( fd >= 0 );
#ifdef DEBUG
printf( "Commit: FD=%d\n", fd );
#endif
/****************************************************/
/* Prepare to Commit Phase */
/* - Check that all writes made it to the server(s) */
/****************************************************/
/****************/
/* Commit Phase */
/****************/
return( NormalReturn );
}
/* ------------------------------------------------------------------ */
int
Abort( int fd )
{
ASSERT( fd >= 0 );
#ifdef DEBUG
printf( "Abort: FD=%d\n", fd );
#endif
/*************************/
/* Abort the transaction */
/*************************/
return(NormalReturn);
}
/* ------------------------------------------------------------------ */
int
CloseFile( int fd ) {
ASSERT( fd >= 0 );
#ifdef DEBUG
printf( "Close: FD=%d\n", fd );
#endif
/*****************************/
/* Check for Commit or Abort */
/*****************************/
if ( close( fd ) < 0 ) {
perror("Close");
return(ErrorReturn);
}
return(NormalReturn);
}
/* ------------------------------------------------------------------ */