int main(int argc,char **argv) { srand(42); // insert numbers in the array for (int32 i = 0;i < gNumber;i++) { int32 num = rand(); if (num == 0) num++; if (gArray.Insert(num) == B_OK) gList.AddItem((void *)num); else if (gArray.Find(num) < 0) { printf("Could not insert entry in array, but it's not in there either...\n"); dumpArray(); } else printf("hola\n"); } // check for numbers in the array for (int32 i = 0;i < gNumber;i++) { int32 num = (int32)gList.ItemAt(i); if (gArray.Find(num) < 0) { printf("could not found entry %ld in array!\n",num); dumpArray(); } } // iterate through the array sorted_array *array = gArray.Array(); for (int32 i = 0;i < array->count;i++) { if (!gList.HasItem((void *)array->values[i])) { printf("Could not find entry %Ld at %ld in list!\n",array->values[i],i); dumpArray(); } } return 0; }
int main(int argc, const char * argv[]) { LinkN *null = NULL; LinkN **head = &null; const size_t COUNT = 37; size_t *data = SafeMalloc(COUNT * sizeof(size_t)), i; LinkN *nodes = SafeMalloc(COUNT * sizeof(LinkN)); rb_red_blk_tree tree; RBTreeInit(&tree, &pointerDiff, NULL, &RBNodeAlloc); for(i = 0; i < COUNT; i++){ data[i] = i; nodes[i].data = data + i; linkFront(head, nodes + i); } dumpList(head); mergeSort(head, &csT); dumpList(head); qsort(data, 0, COUNT, &qsCompare); dumpArray(data, COUNT); for(i = 0; i < COUNT; i++){ RBSetAdd(&tree, data + i); } dumpSet(&tree); dPrintf(("%p - %p = " PDF " ?= (-1 * " PDF ")\n",(void*)&data[2],(void*)&data[3],(&data[2] - &data[3]),(&data[3] - &data[2]))); dPrintf(("\t ?= %d ?= (-1 * %d)\n",pointerDiff(&data[2], &data[3]),pointerDiff(&data[3], &data[2]))); free(nodes); free(data); return 0; }
void main(void) { int i; cout << endl << endl; cout << "Memory at start: " << coreleft() << " bytes\n"; SArray<int> a(10),b(a),c; // Create an array of 10 elements for (i = 10; i > 1; i--) { a.add(i); } cout << "Memory after creating array: " << coreleft() << " bytes\n"; dumpArray(a); dumpArray(b); // Sort the array a and copy it to c a.sort(); c = a; dumpArray(c); // Insert a number of elements in sorted order a.setDelta(10); for (i = 100; i < 120; i++) { a.addSorted(i); } dumpArray(a); // Display the array using iterators. ArrayIterator<int> it1; for (it1 = a; it1; it1++) cout << it1.node() << " "; cout << endl; for (it1.restart(); it1;) cout << it1++ << " "; cout << endl; for (it1.restart(10,20); it1;) cout << ++it1 << " "; cout << endl; // Search for an item in the array cout << "Index of element 110 (linear search): " << a.search(110) << endl; cout << " (binary search): " << a.binarySearch(110) << endl; cout << "Index of element 200 (linear search): " << a.search(200) << endl; cout << " (binary search): " << a.binarySearch(200) << endl; cout << "Memory at end: " << coreleft() << " bytes\n\n"; }
inline void dumpStatus(std::ostream &file, const Status &status, const std::string& title = "", int indent = 0) { dumpArray(file, status, title, indent); }
error_t processClientRequest(SOCKET clientSocket) { error_t error; size_t n; char_t *p; char_t buffer[512]; char_t response[2048]; TlsContext *tlsContext; //Start of exception handling block do { //Initialize SSL/TLS context tlsContext = tlsInit(); //Initialization failed? if(!tlsContext) { //Report an error error = ERROR_OUT_OF_MEMORY; //Exit immediately break; } //Select server operation mode error = tlsSetConnectionEnd(tlsContext, TLS_CONNECTION_END_SERVER); //Any error to report? if(error) break; //Bind TLS to the relevant socket error = tlsSetSocket(tlsContext, clientSocket); //Any error to report? if(error) break; //Set the PRNG algorithm to be used error = tlsSetPrng(tlsContext, YARROW_PRNG_ALGO, &yarrowContext); //Any error to report? if(error) break; //Session cache that will be used to save/resume TLS sessions error = tlsSetCache(tlsContext, tlsCache); //Any error to report? if(error) break; //Client authentication is optional error = tlsSetClientAuthMode(tlsContext, TLS_CLIENT_AUTH_OPTIONAL); //Any error to report? if(error) break; //Import Diffie-Hellman parameters error = tlsSetDhParameters(tlsContext, dhParams, dhParamsLength); //Any error to report? if(error) break; //Import the server's RSA certificate error = tlsAddCertificate(tlsContext, serverRsaCert, serverRsaCertLength, serverRsaPrivateKey, serverRsaPrivateKeyLength); //Any error to report? if(error) break; //Import the server's DSA certificate error = tlsAddCertificate(tlsContext, serverDsaCert, serverDsaCertLength, serverDsaPrivateKey, serverDsaPrivateKeyLength); //Any error to report? if(error) break; //Import the server's ECDSA certificate error = tlsAddCertificate(tlsContext, serverEcdsaCert, serverEcdsaCertLength, serverEcdsaPrivateKey, serverEcdsaPrivateKeyLength); //Any error to report? if(error) break; //Import the list of trusted CA certificates error = tlsSetTrustedCaList(tlsContext, trustedCaList, trustedCaListLength); //Any error to report? if(error) break; //Establish a secure session error = tlsConnect(tlsContext); //TLS handshake failure? if(error) break; //Debug message TRACE_INFO("\r\n"); TRACE_INFO("HTTP request:\r\n"); //Read HTTP request while(1) { //Read a complete line error = tlsRead(tlsContext, buffer, sizeof(buffer), &n, TLS_FLAG_BREAK_CRLF); //Any error to report? if(error) break; //Properly terminate the string with a NULL character buffer[n] = '\0'; //Dump HTTP request TRACE_INFO("%s", buffer); //The end of the header has been reached? if(!strcmp(buffer, "\r\n")) break; } //Propagate exception if necessary... if(error) break; //Point to the beginning of the response p = response; //Format response p += sprintf(p, "HTTP/1.0 200 OK\r\n"); p += sprintf(p, "Content-Type: text/html\r\n"); p += sprintf(p, "\r\n"); p += sprintf(p, "<!DOCTYPE html>\r\n"); p += sprintf(p, "<html>\r\n"); p += sprintf(p, "<head>\r\n"); p += sprintf(p, " <title>Oryx Embedded - CycloneSSL Server Demo</title>\r\n"); p += sprintf(p, " <style>\r\n"); p += sprintf(p, " body {font-family: monospace; font-size: 13px;}\r\n"); p += sprintf(p, " table {border-width: 1px; border-style: ouset; border-collapse: collapse;}\r\n"); p += sprintf(p, " td {border-width: 1px; border-style: inset; padding: 3px;}\r\n"); p += sprintf(p, " </style>\r\n"); p += sprintf(p, "</head>\r\n"); p += sprintf(p, "<body>\r\n"); p += sprintf(p, " <p>Welcome to the CycloneSSL demo server!</p>\r\n"); p += sprintf(p, " <table>\r\n"); p += sprintf(p, " <tr>\r\n"); p += sprintf(p, " <td>Hit counter</td>\r\n"); p += sprintf(p, " <td>%d</td>\r\n", hitCounter); p += sprintf(p, " </tr>\r\n"); p += sprintf(p, " <tr>\r\n"); p += sprintf(p, " <td>Server version</td>\r\n"); p += sprintf(p, " <td>%s</td>\r\n", tlsGetVersionName(TLS_MAX_VERSION)); p += sprintf(p, " </tr>\r\n"); p += sprintf(p, " <tr>\r\n"); p += sprintf(p, " <td>Client version</td>\r\n"); p += sprintf(p, " <td>%s</td>\r\n", tlsGetVersionName(tlsContext->clientVersion)); p += sprintf(p, " </tr>\r\n"); p += sprintf(p, " <tr>\r\n"); p += sprintf(p, " <td>Negotiated version</td>\r\n"); p += sprintf(p, " <td>%s</td>\r\n", tlsGetVersionName(tlsContext->version)); p += sprintf(p, " </tr>\r\n"); p += sprintf(p, " <tr>\r\n"); p += sprintf(p, " <td>Cipher suite</td>\r\n"); p += sprintf(p, " <td>%s</td>\r\n", tlsGetCipherSuiteName(tlsContext->cipherSuite)); p += sprintf(p, " </tr>\r\n"); p += sprintf(p, " <tr>\r\n"); p += sprintf(p, " <td>Client random</td>\r\n"); p += sprintf(p, " <td>\r\n"); p += sprintf(p, " %s\r\n", dumpArray(buffer, (uint8_t *) &tlsContext->clientRandom, 32)); p += sprintf(p, " </td>\r\n"); p += sprintf(p, " </tr>\r\n"); p += sprintf(p, " <tr>\r\n"); p += sprintf(p, " <td>Server random</td>\r\n"); p += sprintf(p, " <td>\r\n"); p += sprintf(p, " %s\r\n", dumpArray(buffer, (uint8_t *) &tlsContext->serverRandom, 32)); p += sprintf(p, " </td>\r\n"); p += sprintf(p, " </tr>\r\n"); p += sprintf(p, " <tr>\r\n"); p += sprintf(p, " <td>Session ID</td>\r\n"); p += sprintf(p, " <td>\r\n"); p += sprintf(p, " %s\r\n", dumpArray(buffer, tlsContext->sessionId, tlsContext->sessionIdLength)); p += sprintf(p, " </td>\r\n"); p += sprintf(p, " </tr>\r\n"); p += sprintf(p, " </table>\r\n"); p += sprintf(p, "</body>\r\n"); p += sprintf(p, "</html>\r\n"); //Dump HTTP response TRACE_INFO("HTTP response:\r\n"); TRACE_INFO("%s\r\n", response); //Send response to the client error = tlsWrite(tlsContext, response, strlen(response), 0); //Any error to report? if(error) break; //End of exception handling block } while(0); //Terminate SSL session tlsFree(tlsContext); //Return status code return error; }
// Dump array attributes of an object void dump_arrays(sqlite3* db, long long oid) { int rv; unsigned long count; sqlite3_stmt* sqlcnt = NULL; sqlite3_stmt* sqlid = NULL; std::string commandcnt = "select count(id) from attribute_array where object_id=?;"; std::string commandid = "select id from attribute_array where object_id=?;"; rv = sqlite3_prepare_v2(db, commandcnt.c_str(), -1, &sqlcnt, NULL); if (rv != SQLITE_OK) { fprintf(stderr, "can't count the object table: %d(%s)\n", rv, sqlite3_errmsg(db)); sqlite3_finalize(sqlcnt); return; } rv = sqlite3_bind_int64(sqlcnt, 1, oid); if (rv != SQLITE_OK) { fprintf(stderr, "can't bind the object id: %d(%s)\n", rv, sqlite3_errmsg(db)); sqlite3_finalize(sqlcnt); return; } while ((rv = sqlite3_step(sqlcnt)) == SQLITE_BUSY) { sched_yield(); } if (rv != SQLITE_ROW) { fprintf(stderr, "can't count the object table: %d(%s)\n", rv, sqlite3_errmsg(db)); sqlite3_finalize(sqlcnt); return; } count = sqlite3_column_int(sqlcnt, 0); sqlite3_finalize(sqlcnt); if (count == 0) return; printf("%lu array attributes for object %lld\n", count, oid); rv = sqlite3_prepare_v2(db, commandid.c_str(), -1, &sqlid, NULL); if (rv != SQLITE_OK) { fprintf(stderr, "can't count the object table: %d(%s)\n", rv, sqlite3_errmsg(db)); sqlite3_finalize(sqlid); return; } rv = sqlite3_bind_int64(sqlid, 1, oid); if (rv != SQLITE_OK) { fprintf(stderr, "can't bind the object id: %d(%s)\n", rv, sqlite3_errmsg(db)); sqlite3_finalize(sqlid); return; } while (count-- > 0) { while ((rv = sqlite3_step(sqlid)) == SQLITE_BUSY) { sched_yield(); } if (rv != SQLITE_ROW) { if (rv != SQLITE_DONE) { fprintf(stderr, "can't get next object id: %d(%s)\n", rv, sqlite3_errmsg(db)); } sqlite3_finalize(sqlid); return; } long long id = sqlite3_column_int64(sqlid, 0); uint64_t type; std::vector<Attribute> value; if (!getArray(db, oid, id, type, value)) { return; } dumpULong(type); if ((uint64_t)((uint32_t)type) != type) { printf("overflow attribute type\n"); } else { dumpCKA((unsigned long) type, 48); printf("\n"); } dumpULong((uint64_t) value.size()); printf("(length %lu)\n", (unsigned long) value.size()); dumpArray(value); } }
void main(void) { int i; cout << endl << endl; cout << "Memory at start: " << coreleft() << " bytes\n"; IArray<MyNode> a(10),b(a),c; // Create an array of 10 elements for (i = 0; i < 10; i++) { a.add(new MyNode(i)); } cout << "Memory after creating array: " << coreleft() << " bytes\n"; dumpArray(a); dumpArray(b); cout << "a == b > " << ((a == b) ? "TRUE" : "FALSE") << endl; c = a; dumpArray(c); cout << "c == a > " << ((c == a) ? "TRUE" : "FALSE") << endl; // Insert a number of elements into the middle of the array a.setDelta(10); for (i = 100; i < 120; i++) { a.insert(new MyNode(i),5); } dumpArray(a); getch(); // Insert an element at the start and at the end a.insert(new MyNode(-1),0); a.insert(new MyNode(-2),a.numberOfItems()); dumpArray(a); getch(); // Now replace some elements in the array a.replace(new MyNode(-3),4); a.replace(new MyNode(-3),5); delete a[6]; a[6] = new MyNode(-4); delete a[7]; a[7] = new MyNode(-5); dumpArray(a); getch(); // Now remove some elements from the array for (i = 0; i < 7; i++) a.destroy(4); dumpArray(a); a.destroy(10); dumpArray(a); getch(); // Display the array using iterators. IArrayIterator<MyNode> it1; for (it1 = a; it1; it1++) cout << *it1.node() << " "; cout << endl; for (it1.restart(); it1;) cout << *it1++ << " "; cout << endl; for (it1.restart(10,20); it1;) cout << *++it1 << " "; cout << endl; getch(); a.empty(); dumpArray(a); cout << "Memory at end: " << coreleft() << " bytes\n\n"; }