OLD | NEW |
1 // Copyright (c) 2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2008 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 // Written in NSPR style to also be suitable for adding to the NSS demo suite | 4 // Written in NSPR style to also be suitable for adding to the NSS demo suite |
5 | 5 |
6 /* memio is a simple NSPR I/O layer that lets you decouple NSS from | 6 /* memio is a simple NSPR I/O layer that lets you decouple NSS from |
7 * the real network. It's rather like openssl's memory bio, | 7 * the real network. It's rather like openssl's memory bio, |
8 * and is useful when your app absolutely, positively doesn't | 8 * and is useful when your app absolutely, positively doesn't |
9 * want to let NSS do its own networking. | 9 * want to let NSS do its own networking. |
10 */ | 10 */ |
(...skipping 341 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
352 fd = PR_CreateIOLayerStub(memio_identity, &memio_layer_methods); | 352 fd = PR_CreateIOLayerStub(memio_identity, &memio_layer_methods); |
353 secret = malloc(sizeof(struct PRFilePrivate)); | 353 secret = malloc(sizeof(struct PRFilePrivate)); |
354 memset(secret, 0, sizeof(*secret)); | 354 memset(secret, 0, sizeof(*secret)); |
355 | 355 |
356 memio_buffer_new(&secret->readbuf, bufsize); | 356 memio_buffer_new(&secret->readbuf, bufsize); |
357 memio_buffer_new(&secret->writebuf, bufsize); | 357 memio_buffer_new(&secret->writebuf, bufsize); |
358 fd->secret = secret; | 358 fd->secret = secret; |
359 return fd; | 359 return fd; |
360 } | 360 } |
361 | 361 |
362 void memio_SetPeerName(PRFileDesc *fd, const PRNetAddr *peername) | 362 void memio_SetPeerName(PRFileDesc *fd, const struct sockaddr *peername, |
| 363 size_t peername_len) |
363 { | 364 { |
364 PRFileDesc *memiofd = PR_GetIdentitiesLayer(fd, memio_identity); | 365 PRFileDesc *memiofd = PR_GetIdentitiesLayer(fd, memio_identity); |
365 struct PRFilePrivate *secret = memiofd->secret; | 366 struct PRFilePrivate *secret = memiofd->secret; |
366 secret->peername = *peername; | 367 size_t len; |
| 368 |
| 369 memset(&secret->peername, 0, sizeof(secret->peername)); |
| 370 PR_ASSERT(peername_len <= sizeof(secret->peername)); |
| 371 len = PR_MIN(peername_len, sizeof(secret->peername)); |
| 372 memcpy(&secret->peername, peername, len); |
367 } | 373 } |
368 | 374 |
369 memio_Private *memio_GetSecret(PRFileDesc *fd) | 375 memio_Private *memio_GetSecret(PRFileDesc *fd) |
370 { | 376 { |
371 PRFileDesc *memiofd = PR_GetIdentitiesLayer(fd, memio_identity); | 377 PRFileDesc *memiofd = PR_GetIdentitiesLayer(fd, memio_identity); |
372 struct PRFilePrivate *secret = memiofd->secret; | 378 struct PRFilePrivate *secret = memiofd->secret; |
373 return (memio_Private *)secret; | 379 return (memio_Private *)secret; |
374 } | 380 } |
375 | 381 |
376 int memio_GetReadParams(memio_Private *secret, char **buf) | 382 int memio_GetReadParams(memio_Private *secret, char **buf) |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
475 CHECKEQ(memio_buffer_unused_contiguous(&mb), 0); | 481 CHECKEQ(memio_buffer_unused_contiguous(&mb), 0); |
476 CHECKEQ(memio_buffer_used_contiguous(&mb), 1); | 482 CHECKEQ(memio_buffer_used_contiguous(&mb), 1); |
477 | 483 |
478 /* TODO: add more cases */ | 484 /* TODO: add more cases */ |
479 | 485 |
480 printf("Test passed\n"); | 486 printf("Test passed\n"); |
481 exit(0); | 487 exit(0); |
482 } | 488 } |
483 | 489 |
484 #endif | 490 #endif |
OLD | NEW |