| 156 | int m_runningFlag; |
| 157 | |
| 158 | int recvEvent(Event event, int fd, int pid, uid_t uid, const char *path, uint8_t *recvData, int recvDataLen) { |
| 159 | |
| 160 | if (event == EVENT_ERROR) { |
| 161 | perr("LocalsocketClient recvEvent EVENT_ERROR: uid:%d, path:%s, fd:%d. Reconnect now.", uid, path, fd); |
| 162 | return 0; |
| 163 | } |
| 164 | |
| 165 | if (event == EVENT_DATA) { |
| 166 | int recvDataOffset = 0; |
| 167 | |
| 168 | while (recvDataOffset < recvDataLen) { |
| 169 | int recvDataLeft = recvDataLen - recvDataOffset; |
| 170 | |
| 171 | if (respHeaderOffset < sizeof(AMCRespHeader)) { // fill header |
| 172 | int shouldRead = sizeof(AMCRespHeader) - respHeaderOffset; |
| 173 | shouldRead = shouldRead < recvDataLeft ? shouldRead : recvDataLeft; |
| 174 | |
| 175 | memcpy(respHeaderBuf + respHeaderOffset, recvData + recvDataOffset, shouldRead); |
| 176 | recvDataOffset += shouldRead; |
| 177 | respHeaderOffset += shouldRead; |
| 178 | } |
| 179 | if (respHeaderOffset == sizeof(AMCRespHeader)) { // fill data |
| 180 | AMCRespHeader *pHeader = (AMCRespHeader *)(respHeaderBuf); |
| 181 | pdbg("pHead->requestid:%lld, version:%d, recvDataLen:%d", pHeader->requestid, pHeader->version, recvDataLen); |
| 182 | |
| 183 | if (pHeader->begin != HEADER_BEGIN) { |
| 184 | perr("Check Header BEGIN failed:0x%x server:0x%x", pHeader->begin, HEADER_BEGIN); |
| 185 | if (respPayload) { |
| 186 | delete[] respPayload; |
| 187 | } |
| 188 | respPayload = NULL; |
| 189 | respHeaderOffset = 0; |
| 190 | return -1; |
| 191 | } |
| 192 | |
| 193 | if(pHeader->version >= HEADER_JSON_VERSION){//json, use AMCRespHeaderV2 |
| 194 | //fill header |
| 195 | recvDataLeft = recvDataLen - recvDataOffset; |
| 196 | int shouldRead = sizeof(AMCRespHeaderV2) - respHeaderOffset; |
| 197 | shouldRead = shouldRead < recvDataLeft ? shouldRead : recvDataLeft; |
| 198 | memcpy(respHeaderBuf + respHeaderOffset, recvData + recvDataOffset, shouldRead); |
| 199 | recvDataOffset += shouldRead; |
| 200 | respHeaderOffset += shouldRead; |
| 201 | AMCRespHeaderV2 *pHeaderV2 = (AMCRespHeaderV2 *)(respHeaderBuf); |
| 202 | |
| 203 | if (pHeaderV2->bodylen) { |
| 204 | if (respPayload == NULL) { |
| 205 | respPayload = new uint8_t[pHeaderV2->bodylen]; |
| 206 | } |
| 207 | pdbg("LocalsocketClient recvEvent EVENT_DATA, pHeaderV2->bodylen:%d, respPayloadOffset:%d", pHeaderV2->bodylen, respPayloadOffset); |
| 208 | int shouldRead = pHeaderV2->bodylen - respPayloadOffset;//respPayloadOffset = 0, shouldRead=bodylen |
| 209 | shouldRead = shouldRead < recvDataLeft ? shouldRead : recvDataLeft; |
| 210 | |
| 211 | memcpy(respPayload + respPayloadOffset, recvData + recvDataOffset, shouldRead); |
| 212 | respPayloadOffset += shouldRead;//=bodylen |
| 213 | recvDataOffset += shouldRead;//datalen |
| 214 | } |
| 215 | if (respPayloadOffset == pHeaderV2->bodylen) { |
nothing calls this directly
no test coverage detected