Exemplo n.º 1
0
Arquivo: kheader.c Projeto: klopp/knet
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;
}
Exemplo n.º 2
0
Arquivo: kmail.c Projeto: klopp/ksmtp
void mail_Destroy( KMail mail )
{
    sdel( mail->error );
    sdel( mail->login );
    sdel( mail->password );
    sdel( mail->host );
    smtp_Destroy( mail->smtp );
    Free( mail );
}
Exemplo n.º 3
0
Arquivo: kheader.c Projeto: klopp/knet
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;
}
Exemplo n.º 4
0
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;

}
Exemplo n.º 5
0
Arquivo: kheader.c Projeto: klopp/knet
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;
}
Exemplo n.º 6
0
Arquivo: kheader.c Projeto: klopp/knet
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;
}
Exemplo n.º 7
0
Arquivo: kheader.c Projeto: klopp/knet
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;
}
Exemplo n.º 8
0
Arquivo: kheader.c Projeto: klopp/knet
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;
}
Exemplo n.º 9
0
/* 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;
}
Exemplo n.º 10
0
Arquivo: kmail.c Projeto: klopp/ksmtp
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;
}
Exemplo n.º 11
0
Arquivo: kmail.c Projeto: klopp/ksmtp
static int delMFile( MFile file )
{
    sdel( file->body );
    sdel( file->headers );
    return 0;
}