1 /* 2 * Copyright 2019, Andrew Lindesay <apl@lindesay.co.nz>. 3 * 4 * All rights reserved. Distributed under the terms of the MIT License. 5 */ 6 #include "Captcha.h" 7 8 #include <stdio.h> 9 10 #include <DataIO.h> 11 12 // These are keys that are used to store this object's data into a BMessage 13 // instance. 14 15 #define KEY_TOKEN "token" 16 #define KEY_PNG_IMAGE_DATA "pngImageData" 17 18 19 Captcha::Captcha(BMessage* from) 20 : 21 fToken(""), 22 fPngImageData(NULL) 23 { 24 if (from->FindString(KEY_TOKEN, &fToken) != B_OK) { 25 printf("expected key [%s] in the message data when creating a " 26 "Captcha\n", KEY_TOKEN); 27 } 28 29 const void* data; 30 ssize_t len; 31 32 if (from->FindData(KEY_PNG_IMAGE_DATA, B_ANY_TYPE, &data, &len) != B_OK) 33 printf("expected key [%s] in the message data\n", KEY_PNG_IMAGE_DATA); 34 else 35 SetPngImageData(data, len); 36 } 37 38 39 Captcha::Captcha() 40 : 41 fToken(""), 42 fPngImageData(NULL) 43 { 44 } 45 46 47 Captcha::~Captcha() 48 { 49 delete fPngImageData; 50 } 51 52 53 const BString& 54 Captcha::Token() const 55 { 56 return fToken; 57 } 58 59 60 BPositionIO* 61 Captcha::PngImageData() const 62 { 63 return fPngImageData; 64 } 65 66 67 void 68 Captcha::SetToken(const BString& value) 69 { 70 fToken = value; 71 } 72 73 74 void 75 Captcha::SetPngImageData(const void* data, size_t len) 76 { 77 if (fPngImageData != NULL) 78 delete fPngImageData; 79 fPngImageData = NULL; 80 if (data != NULL) { 81 fPngImageData = new BMallocIO(); 82 fPngImageData->Write(data, len); 83 } 84 } 85 86 87 status_t 88 Captcha::Archive(BMessage* into, bool deep) const 89 { 90 status_t result = B_OK; 91 if (result == B_OK && into == NULL) 92 result = B_ERROR; 93 if (result == B_OK) 94 result = into->AddString(KEY_TOKEN, fToken); 95 if (result == B_OK && fPngImageData != NULL) { 96 result = into->AddData(KEY_PNG_IMAGE_DATA, B_ANY_TYPE, 97 fPngImageData->Buffer(), fPngImageData->BufferLength()); 98 } 99 return result; 100 }