TCN_IMPLEMENT_CALL(jstring, Time, ctime)(TCN_STDARGS, jlong t) { char ts[APR_CTIME_LEN]; UNREFERENCED(o); if (apr_ctime(ts, J2T(t)) == APR_SUCCESS) return AJP_TO_JSTRING(ts); else return NULL; }
TCN_IMPLEMENT_CALL(jstring, Time, rfc822)(TCN_STDARGS, jlong t) { char ts[APR_RFC822_DATE_LEN]; UNREFERENCED(o); if (apr_rfc822_date(ts, J2T(t)) == APR_SUCCESS) return AJP_TO_JSTRING(ts); else return NULL; }
TCN_IMPLEMENT_CALL(jstring, OS, syserror)(TCN_STDARGS, jint err) { jstring str; void *buf; UNREFERENCED(o); if (!FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, err, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&buf, 0, NULL)) { str = AJP_TO_JSTRING("Unknown Error"); } else { str = AJP_TO_JSTRING((const char *)buf); LocalFree(buf); } return str; }
/* Simple echo password prompting */ int SSL_password_prompt(tcn_pass_cb_t *data) { int rv = 0; data->password[0] = '\0'; if (data->cb.obj) { JNIEnv *e; jobject o; jstring prompt; tcn_get_java_env(&e); prompt = AJP_TO_JSTRING(data->prompt); if ((o = (*e)->CallObjectMethod(e, data->cb.obj, data->cb.mid[0], prompt))) { TCN_ALLOC_CSTRING(o); if (J2S(o)) { strncpy(data->password, J2S(o), SSL_MAX_PASSWORD_LEN); data->password[SSL_MAX_PASSWORD_LEN-1] = '\0'; rv = (int)strlen(data->password); } TCN_FREE_CSTRING(o); } } else { #ifdef WIN32 rv = WIN32_SSL_password_prompt(data); #else EVP_read_pw_string(data->password, SSL_MAX_PASSWORD_LEN, data->prompt, 0); #endif rv = (int)strlen(data->password); } if (rv > 0) { /* Remove LF char if present */ char *r = strchr(data->password, '\n'); if (r) { *r = '\0'; rv--; } #ifdef WIN32 if ((r = strchr(data->password, '\r'))) { *r = '\0'; rv--; } #endif } return rv; }
TCN_IMPLEMENT_CALL(jstring, Library, aprVersionString)(TCN_STDARGS) { UNREFERENCED(o); return AJP_TO_JSTRING(apr_version_string()); }
TCN_IMPLEMENT_CALL(jstring, Library, versionString)(TCN_STDARGS) { UNREFERENCED(o); return AJP_TO_JSTRING(TCN_VERSION_STRING); }