static int hdr_MakeTextHeaders( msg_Headers headers, const char * charset, string out ) { msg_Header header; char cprefix[32]; string rc = snew(); if( !rc ) return 0; if( !isUsAsciiCs( charset ) ) snprintf( cprefix, sizeof(cprefix) - 1, "=?%s?B?", charset ); else *cprefix = 0; header = lfirst( headers->text ); while( header ) { if( !hdr_MakeTextHeader( header, cprefix, rc ) ) { sdel( rc ); return 0; } header = lnext( headers->text ); } if( !scat( out, rc ) ) { sdel( rc ); return 0; } sdel( rc ); return 1; }
void mail_Destroy( KMail mail ) { sdel( mail->error ); sdel( mail->login ); sdel( mail->password ); sdel( mail->host ); smtp_Destroy( mail->smtp ); Free( mail ); }
string hdr_AsString( msg_Headers headers, const char * charset ) { string out = snew(); if( !out || !hdr_MakeMailHeaders( headers, charset, out ) || !hdr_MakeTextHeaders( headers, charset, out ) ) { sdel( out ); return NULL; } return out; }
bool ReplicaExchange::do_exchange(double myscore0, double myscore1, int findex) { double myscore=myscore0-myscore1; double fscore; int myindex=index_[myrank_]; int frank=get_rank(findex); MPI_Sendrecv(&myscore,1,MPI_DOUBLE,frank,myrank_, &fscore,1,MPI_DOUBLE,frank,frank, MPI_COMM_WORLD, &status_); bool do_accept=get_acceptance(myscore,fscore); boost::scoped_array<int> sdel(new int[nproc_ - 1]); boost::scoped_array<int> rdel(new int[nproc_ - 1]); for(int i=0;i<nproc_-1;++i) {sdel[i]=0;} if(do_accept){ std::map<std::string,Floats>::iterator it; for (it = parameters_.begin(); it != parameters_.end(); it++){ Floats param = get_friend_parameter((*it).first,findex); set_my_parameter((*it).first,param); } //update the increment vector only to those replicas that upgraded to //a higher temperature to avoid double // calculations (excluding the transition 0 -> nrep-1) int delindex=findex-myindex; if (delindex==1){ //std::cout << myindex << " " << findex << " " << std::endl; sdel[myindex]=1; } //update the indexes myindex=findex; } MPI_Barrier(MPI_COMM_WORLD); //get the increment vector from all replicas and copy it to the //exchange array MPI_Allreduce(sdel.get(),rdel.get(),nproc_-1,MPI_INT,MPI_SUM,MPI_COMM_WORLD); for(int i=0;i<nproc_-1;++i) {exarray_[i]=rdel[i];} // in any case, update index vector boost::scoped_array<int> sbuf(new int[nproc_]); boost::scoped_array<int> rbuf(new int[nproc_]); for(int i=0;i<nproc_;++i) {sbuf[i]=0;} sbuf[myrank_]=myindex; MPI_Allreduce(sbuf.get(),rbuf.get(),nproc_,MPI_INT,MPI_SUM,MPI_COMM_WORLD); for(int i=0;i<nproc_;++i){index_[i]=rbuf[i];} return do_accept; }
static int hdr_MakeMailHeader( msg_Header header, const char * cprefix, string out ) { Pair email; string rc; rc = snew(); if( !rc ) return 0; email = plfirst( header->values ); while( email ) { string value = hdr_MakeEmail( cprefix, email ); if( !value ) { sdel( rc ); return 0; } if( !scatc( rc, sstr( value ) ) ) { sdel( rc ); return 0; } email = plnext( header->values ); if( !scatc( rc, email ? "," : "\r\n" ) ) { sdel( rc ); return 0; } } if( !scat( out, rc ) ) { sdel( rc ); return 0; } sdel( rc ); return 1; }
static string hdr_Encodeb64( const char * prefix, const char * value ) { string encoded = snew(); size_t size = strlen( value ); char * first = ""; if( !encoded ) return NULL; while( size ) { string b64; size_t to_encode = size > ENCODED_BLK_SIZE ? ENCODED_BLK_SIZE : size; b64 = base64_encode( value, to_encode ); if( !b64 ) { sdel( b64 ); sdel( encoded ); return NULL; } if( !xscatc( encoded, first, prefix, sstr( b64 ), "?=", NULL ) ) { sdel( b64 ); sdel( encoded ); return NULL; } sdel( b64 ); first = " "; size -= to_encode; value += to_encode; if( size ) { if( !scatc( encoded, "\r\n" ) ) { sdel( b64 ); sdel( encoded ); return NULL; } } } return encoded; }
static string hdr_MakeEmail( const char * cprefix, Pair a ) { string buf = snew(); if( !buf ) return NULL; if( A_NAME( a ) ) { if( isUsAscii( A_NAME( a ) ) ) { if( !sprint( buf, "%s <%s>", A_NAME( a ), A_EMAIL( a ) ) ) { sdel( buf ); return NULL; } } else { string b64 = hdr_Encodeb64( cprefix, A_NAME( a ) ); if( !b64 ) { sdel( buf ); return NULL; } if( !sprint( buf, "%s <%s>", sstr( b64 ), A_EMAIL( a ) ) ) { sdel( buf ); sdel( b64 ); return NULL; } sdel( b64 ); } } else { if( !scatc( buf, A_EMAIL( a ) ) ) { sdel( buf ); return 0; } } return buf; }
static int hdr_MakeTextHeader( msg_Header header, const char * cprefix, string out ) { char * value; string rc = snew(); if( !rc ) return 0; value = slfirst( header->values ); while( value ) { if( isUsAscii( value ) ) { if( !xscatc( rc, header->name, ": ", value, "\r\n", NULL ) ) { sdel( rc ); return 0; } } else { string b64 = hdr_Encodeb64( cprefix, value ); if( !b64 ) return 0; if( !xscatc( rc, header->name, ": ", sstr( b64 ), "\r\n", NULL ) ) { sdel( b64 ); sdel( rc ); return 0; } sdel( b64 ); } value = slnext( header->values ); } if( !scat( out, rc ) ) { sdel( rc ); return 0; } sdel( rc ); return 1; }
/* Split: full version */ int splitf(slist *s, char *msg, char *dlm, int strict) { char *p = msg; char *w = NULL; int tokens = 0; int dlen; char cp, cd; if(!s || !p) return 0; if(!dlm) { if(strict & 4) strict &= ~4; if(strict) dlm = ":"; else dlm = " \t\n\r"; } cd = *dlm; dlen = strlen(dlm); if(strict & 2) { for(; (cp = *p); p++) { if((cd == cp) && (strncmp(p, dlm, dlen) == 0)) { if(w) { if(sadd2(s, w, p-w) == -1) { while(tokens--) /* cleanup */ sdel(s, s->count - 1); return -1; } w = NULL; tokens++; } else if(strict & 1) { if(sadd2(s, "", 0) == -1) { while(tokens--) /* cleanup */ sdel(s, s->count - 1); return -1; }; tokens++; } p += dlen - 1; } else { if(!w) w = p; } } } else { for(; (cp = *p); p++) { if((cd == cp) || memchr(dlm, cp, dlen)) { if(w) { if(sadd2(s, w, p-w) == -1) { while(tokens--) sdel(s, s->count -1); return -1; }; w = NULL; tokens++; } else if(strict & 1) { if(sadd2(s, "", 0) == -1) { while(tokens--) sdel(s, s->count -1); return -1; } tokens++; } } else { if(!w) w = p; } } } if(w) { sadd2(s, w, p-w); tokens++; } return tokens; }
int mail_SendMessage( KMail mail, KMsg msg ) { Pair addr; int rc = 1; string out = NULL; string related = NULL; string multipart = NULL; char mp_boundary[36]; char r_boundary[36]; if( !smtp_MAIL_FROM( mail->smtp, A_EMAIL(msg->from) ) ) { rc = 0; goto pmend; } addr = lfirst( msg->to ); while( addr ) { if( !smtp_RCPT_TO( mail->smtp, A_EMAIL(addr) ) ) { rc = 0; goto pmend; } addr = lnext( msg->to ); } addr = lfirst( msg->cc ); while( addr ) { if( !smtp_RCPT_TO( mail->smtp, A_EMAIL(addr) ) ) { rc = 0; goto pmend; } addr = lnext( msg->cc ); } addr = lfirst( msg->bcc ); while( addr ) { if( !smtp_RCPT_TO( mail->smtp, A_EMAIL(addr) ) ) { rc = 0; goto pmend; } addr = lnext( msg->bcc ); } out = msg_CreateHeaders( msg ); if( !out ) { rc = 0; goto pmend; } if( mail->flags & KMAIL_VERBOSE_MSG ) { fprintf( stderr, "%s", sstr( out ) ); } if( !smtp_DATA( mail->smtp ) || !smtp_write( mail->smtp, sstr( out ) ) ) { rc = 0; goto pmend; } sdel( out ); out = msg_CreateBody( msg ); if( !out ) { rc = 0; goto pmend; } if( mail->flags & KMAIL_VERBOSE_MSG ) { fprintf( stderr, "%s", sstr( out ) ); } if( msg->efiles->size ) { mimeMakeBoundary( r_boundary ); related = sfromchar( "Content-Type: multipart/related; boundary=\"" ); if( !related || !xscatc( related, r_boundary, "\"\r\n\r\n", NULL ) ) { rc = 0; goto pmend; } } if( msg->afiles->size ) { mimeMakeBoundary( mp_boundary ); multipart = sfromchar( "Content-Type: multipart/mixed; boundary=\"" ); if( !multipart || !xscatc( multipart, mp_boundary, "\"\r\n\r\n", NULL ) ) { rc = 0; goto pmend; } if( !smtp_write( mail->smtp, sstr( multipart ) ) ) { rc = 0; goto pmend; } if( slen(out) && !write_boundary( mail->smtp, mp_boundary ) ) { rc = 0; goto pmend; } if( related ) { if( !smtp_write( mail->smtp, sstr( related ) ) || !write_boundary( mail->smtp, r_boundary ) || !smtp_write( mail->smtp, sstr( out ) ) || !mail_EmbedFiles( mail, msg, r_boundary ) || !write_boundary_end( mail->smtp, r_boundary ) ) { rc = 0; goto pmend; } } if( !mail_AttachFiles( mail, msg, mp_boundary ) || !write_boundary_end( mail->smtp, mp_boundary ) ) { rc = 0; goto pmend; } } else if( msg->efiles->size ) { if( !smtp_write( mail->smtp, sstr( related ) ) || !write_boundary( mail->smtp, r_boundary ) || !smtp_write( mail->smtp, sstr( out ) ) || !mail_EmbedFiles( mail, msg, r_boundary ) || !write_boundary_end( mail->smtp, r_boundary ) ) { rc = 0; goto pmend; } } else { if( slen( out ) && !smtp_write( mail->smtp, sstr( out ) ) ) { rc = 0; goto pmend; } } pmend: sdel( out ); sdel( related ); sdel( multipart ); smtp_END_DATA( mail->smtp ); return rc; }
static int delMFile( MFile file ) { sdel( file->body ); sdel( file->headers ); return 0; }